在数据框列表中创建列名

时间:2016-01-06 18:11:56

标签: r

我想将数据帧列表中的所有列名称(V1,V2,V3,...)更改为相同长度的向量中的名称。有几个非常相似的问题,但没有一个适用于我的特定列表。任何帮助表示赞赏。下面的数据框(第8条)不会将V1,V2,V3,......识别为列名。first8, 19.9 MB

我的矢量(colnames)包含249个名字。数据帧列表中还有249个变量。

Column names

我已经尝试了几种失败的方法但他们在SO中使用了类似的例子。

> for(i in 1:length(first8)){
+ colnames(first8[[i]]) <- colnames
+ }
Error in `colnames<-`(`*tmp*`, value = c("FILEID", "FILETYPE", "STUSAB",  : 
  'names' attribute [249] must be the same length as the vector [8]


> test <- lapply(first8, setNames, colnames)
Error in FUN(X[[i]], ...) : 
  'names' attribute [249] must be the same length as the vector [8]



>Map(function(df, vec) setNames(df, n), first8, colnames)
 Show Traceback

 Rerun with Debug
 Error in setNames(df, n) : 
  'names' attribute [249] must be the same length as the vector [8] 

我做错了什么?谢谢。

2 个答案:

答案 0 :(得分:3)

我们可以尝试

lapply(first8, function(x) setNames(x, vec1))

或没有匿名函数调用

lapply(first8, setNames, vec1)

数据

set.seed(24)
first8 <- lapply(1:5, function(i) 
   as.data.frame(matrix(sample(1:10, 8*5, replace=TRUE), ncol=8)))
vec1 <- LETTERS[1:8]

答案 1 :(得分:0)

`colnames&#39;接受一个字符向量列表。你不需要迭代它们。

colnames(first8) <- colnames[1:8];

有关详细信息,请参阅?colnames