我想将数据帧列表中的所有列名称(V1,V2,V3,...)更改为相同长度的向量中的名称。有几个非常相似的问题,但没有一个适用于我的特定列表。任何帮助表示赞赏。下面的数据框(第8条)不会将V1,V2,V3,......识别为列名。。
我的矢量(colnames)包含249个名字。数据帧列表中还有249个变量。
我已经尝试了几种失败的方法但他们在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]
我做错了什么?谢谢。
答案 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
。