重命名列表中每个数据框的 headers

Renaming the headers of every data frame in a list

我有一个包含多个数据框的列表,所有数据框的列数都相同。

例如,对于包含两个数据框的列表 df_listdf1df2

>df_list

df1
a    b    c
1    1    1
2    2    2
3    3    3

df2
a    b    c
3    2    1
3    2    1
3    2    1

我想将每个数据框的 headers 重命名为 new_headings <- c("A", "B", "C")

我构建了一个for循环:

for (i in 1:length(list)) {
     names(list[[i]]) <- new_headings
}

但是,这不起作用。标题保持原样。如果我单独而不是循环执行它,它工作正常,但是,例如,names(list[[1]]) <- new_headings 适当地更改标题。

我的实际列表很长,有很多数据框。谁能解释为什么这不起作用或我可以使用其他什么方法?谢谢。

我们可以使用 MapsetNames

df_listNew <- Map(setNames, df_list, list(new_headings))

或使用lapply

lapply(df_list, setNames, new_headings)
#$df1
#  A B C
#1 1 1 1
#2 2 2 2
#3 3 3 3

#$df2
#  A B C
#1 3 2 1
#2 3 2 1
#3 3 2 1

数据

df_list <- list(df1 = structure(list(a = 1:3, b = 1:3, c = 1:3), 
       class = "data.frame", row.names = c(NA, 
-3L)), df2 = structure(list(a = c(3, 3, 3), b = c(2, 2, 2), c = c(1, 
1, 1)), class = "data.frame", row.names = c(NA, -3L)))

你可以使用两个for循环

a<-c(1,2,3)
b<-c(1,2,3)
c<-c(1,2,3)
df1<-as.data.frame(cbind(a,b,c))
a<-c(3,2,1)
b<-c(3,2,1)
c<-c(3,2,1)
df2<-as.data.frame(cbind(a,b,c))

df_list<-list(df1,df2)

new_headings <- c("A", "B", "C")   

for (i in 1:length(df_list)) {
  for (j in 1:length(df_list[[i]])) {
    colnames(df_list[[i]])[j] <- new_headings[j]
  }
}

df_list