通过更改数据框的列名来取消列出数据框

时间:2016-03-21 17:47:46

标签: r

让我有一个包含数据框的列表(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中这样做?我会很高兴得到任何帮助。非常感谢。

3 个答案:

答案 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.csvb.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]])))
}