目标:更改以下列表中全局环境所有数据框的列名称
全局环境中的colnames
所以。
0) 列名称为:
colnames = c("USAF","WBAN","YR--MODAHRMN")
1) 我有以下数据帧:df1、df2。
2)我把它们放在一个列表中:
dfList <- list(df1,df2)
3)循环列表:
for (df in dfList){
colnames(df)=colnames
}
但这会创建一个带有我需要的列名称的新 df,它不会更改 df1、df2 中的原始列名称。为什么? lapply 可以作为解决方案吗?谢谢
可以这样:
lapply(dfList, function(x) {colnames(dfList)=colnames})
工作?
最佳答案
使用 lapply,您可以按如下方式进行操作。
创建示例数据:
df1 <- data.frame(A = 1, B = 2, C = 3)
df2 <- data.frame(X = 1, Y = 2, Z = 3)
dfList <- list(df1,df2)
colnames <- c("USAF","WBAN","YR--MODAHRMN")
然后,使用 setNames
覆盖列表,并将新列名称的向量作为 setNames
的第二个参数提供:
lapply(dfList, setNames, colnames)
#[[1]]
# USAF WBAN YR--MODAHRMN
#1 1 2 3
#
#[[2]]
# USAF WBAN YR--MODAHRMN
#1 1 2 3
<小时/>
编辑
如果你想将data.frames分配回全局环境,你可以这样修改代码:
dfList <- list(df1 = df1, df2 = df2)
list2env(lapply(dfList, setNames, colnames), .GlobalEnv)
关于r - 更改 R 中数据框列表中的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28648513/