在R中,更改列表中“选择数据帧”中的“选择列名”

在R中,更改列表中“选择数据帧”中的“选择列名”,r,dataframe,apply,R,Dataframe,Apply,我有一个包含21个非常大的数据帧的列表。对于其中的11个数据帧,我想更改最后5列的名称 下面是一些示例代码,它显示了与我的数据相同的基本结构 x<-data.frame(matrix(data=rep("2",12),ncol=6)) y<-data.frame(matrix(data=rep("3",12),ncol=6)) z<-data.frame(matrix(data=rep("4",12),ncol=6)) a<-list(x,y,z) > a [[1

我有一个包含21个非常大的数据帧的列表。对于其中的11个数据帧,我想更改最后5列的名称

下面是一些示例代码,它显示了与我的数据相同的基本结构

x<-data.frame(matrix(data=rep("2",12),ncol=6))
y<-data.frame(matrix(data=rep("3",12),ncol=6))
z<-data.frame(matrix(data=rep("4",12),ncol=6))
a<-list(x,y,z)

> a
[[1]]
  X1 X2 X3 X4 X5 X6
1  2  2  2  2  2  2
2  2  2  2  2  2  2

[[2]]
  X1 X2 X3 X4 X5 X6
1  3  3  3  3  3  3
2  3  3  3  3  3  3

[[3]]
  X1 X2 X3 X4 X5 X6
1  4  4  4  4  4  4
2  4  4  4  4  4  4
目前这是我不满意的方法:

x<-data.frame(matrix(data=rep("2",12),ncol=6))
y<-data.frame(matrix(data=rep("3",12),ncol=6))
z<-data.frame(matrix(data=rep("4",12),ncol=6))
a<-list(x,y,z)

data_frames_to_change<-c("x","y")
library("data.table")

for (i in 1:length(data_frames_to_change)){
setnames(eval(as.name(data_frames_to_change[i])),colnames(eval(as.name(data_frames_to_change[i]))[2:6]),c("Column2","Column3","Column4","Column5","Column6"))
}

a<-list(x,y,z)
x试试这个:

a[1:2] <- lapply(a[1:2], function(thisdf) {
    names(thisdf)[(length(thisdf)-4):length(thisdf)] <- paste0('Column',2:6)
    thisdf
})

或者只需使用
colnames

colnames(a[[1]])<- c("X1","col2","col3","col4","col5","col6")

colnames(a[[1]])感谢您的回答,Thomas,它在前两个数据帧中运行良好。如果我想根据数据框的列的名称(而不是索引)更改这些列,该怎么办?我在想,这可能只是意味着将
a[1:2]
更改为
a[a==c(“x”,“y”)
。该代码段不起作用,但类似于此。@Tedward好吧,在您展示的示例中,数据帧没有命名。
list(x,y,z)
是一个未命名的列表(标签“x”,“y”和“z”被丢弃。您需要感谢
向我展示命名列表和未命名列表之间的差异(我实际上正在使用命名列表来获取数据)。很抱歉,我的示例与我的数据不像我想象的那样相似。答案正是我现在要找的。非常感谢!
> a
[[1]]
  X1 Column2 Column3 Column4 Column5 Column6
1  2       2       2       2       2       2
2  2       2       2       2       2       2

[[2]]
  X1 Column2 Column3 Column4 Column5 Column6
1  3       3       3       3       3       3
2  3       3       3       3       3       3

[[3]]
  X1 X2 X3 X4 X5 X6
1  4  4  4  4  4  4
2  4  4  4  4  4  4
colnames(a[[1]])<- c("X1","col2","col3","col4","col5","col6")