Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rename Columns of Data.frame in list

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
like image 995
Ryan Erwin Avatar asked Sep 12 '15 15:09

Ryan Erwin


People also ask

How do I change the column names in a list in R?

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.

Can we rename the column values of data frame?

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.

How do I change a column name to a list in Pandas?

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.


1 Answers

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))
like image 179
akrun Avatar answered Oct 22 '22 02:10

akrun