在R中,更改列表中“选择数据帧”中的“选择列名”
我有一个包含21个非常大的数据帧的列表。对于其中的11个数据帧,我想更改最后5列的名称 下面是一些示例代码,它显示了与我的数据相同的基本结构在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
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")