I am trying to use lapply (and want the solution with lapply) to rename columns of a data.frame located in a list, but it's returning names, not the renamed data.frames:
# define list
li <- list(u_n = data.frame(x = 1:3), r_l = data.frame(y = 4:6))
# trying to rename columns after the element of the list they're located in
li_2 <- lapply(1:length(li),
function(x,y) colnames(y[[x]]) <- names(y)[x], y = li)
However, this returns:
[[1]]
[1] "u_n"
[[2]]
[1] "r_l"
If I use the same method as the function specified in lapply individually, it does work:
li[1]
$u_n
x
1 1
2 2
3 3
colnames(li[[1]]) <- names(li)[1]
li[1]
$u_n
u_n
1 1
2 2
3 3
Method 1: using colnames() method colnames() method in R is used to rename and replace the column names of the data frame in R. The columns of the data frame can be renamed by specifying the new column names as a vector.
Renaming Columns of an Existing Dataframe To rename the columns of this DataFrame , we can use the rename() method which takes: A dictionary as the columns argument containing the mapping of original column names to the new column names as a key-value pairs.
tolist() you can convert pandas DataFrame Column to List. df['Courses'] returns the DataFrame column as a Series and then use values. tolist() to convert the column values to list.
We may need to return the object after naming it.
li_2 <- lapply(seq_along(li), function(i) {
colnames(li[[i]]) <- names(li)[i]
li[[i]]})
Or this can be done with setNames
li_2 <- lapply(names(li), function(x) setNames(li[[x]], x) )
Or we could use Map
, which is a wrapper for mapply
(that is a multivariate version of sapply
). We apply the FUN
to corresponding elements of each input.
li_2 <- Map(setNames, li, names(li))
Here, we are changing the column names of each list
element with corresponding names of the list
element. If we are using anonymous function, it would be
Map(function(x,y) setNames(x,y), li, names(li))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With