让我有一个包含数据框的列表(list1)(df1,df2,..,dfn):
每个数据框包含不同数量的列。作为一个例子
list1[[1]]=df1
其中df1:
x y
---- -----
45 6
65 87
12 90
和
list1[[2]]=df2
其中df2:
a b c
---- ---- ----
23 67 43
71 13 8
2 9 12
我想取消列表list1作为返回df1和df2
DF1:
a1 a2
---- -----
45 6
65 87
12 90
DF2:
b1 b2 b3
---- ---- ----
23 67 43
71 13 8
2 9 12
即,
第一个数据框(df1)将标题为a1,a2,a3 ......
第二个数据框(df2)将标题为b1,b2,b3 ......
第三个数据框(df3)将标题为c1,c2,c3 ......
继续。
我怎样才能在R中这样做?我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:3)
这是我在评论中描述的模型。我没有展示list2env
,因为这对您的最终目标来说似乎没有必要。
示例数据:
myList <- replicate(10, data.frame(v1 = 1:2, v2 = 3:4), FALSE)
重命名列并将数据写入csv文件:
lapply(seq_along(myList), function(x) {
FileName <- sprintf("%s.csv", letters[x])
write.csv(setNames(myList[[x]], paste0(letters[x], 1:length(myList[[x]]))),
file = FileName, row.names = FALSE)
})
结果将是10个csv文件,名为a.csv
,b.csv
,依此类推,其中a.csv
将包含名为“a1”......“an”的列。
答案 1 :(得分:3)
以下是使用循环重命名列表中数据帧的列的方法。
for (i in seq_along(list1)) {
setNames(list1[[i]], paste0(letters[i], seq_along(list1[[i]])))
}
答案 2 :(得分:2)
非常感谢@A Handcraft和Mohair以及@Gregor。根据@A Handcraft和Mohair的建议,我的代码如下:
list2<-list()
for(i in seq_along(list1))
{
list2[[i]]<-setNames(list1[[i]], paste(letters[[i]],1:ncol(list1[[i]])))
}