目标:更改以下列表中全局环境中所有数据框的列名
全局环境中的列名
所以。
0)列名为:
colnames = c("USAF","WBAN","YR--MODAHRMN")
1)我有以下 Dataframe :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})
工作?
6条答案
按热度按时间stszievb1#
使用lapply,您可以按如下方式进行操作。
创建示例数据:
然后,使用
setNames
对列表应用lapply,并将新列名的向量作为setNames
的第二个参数提供:编辑
如果您想将data.frames重新分配给全局环境,您可以像这样修改代码:
9rnv2umw2#
只需将你的for循环转换成如下的index for循环:
数据类型
解决方案
产出
通过使用
for (df in dfList)
,您实际上每次都创建一个新的df,并将列名更改为原始列表(dfList
)不变的列名。q5iwbnjs3#
如果你想让
for
循环工作,你不应该把整个data.frame作为参数传递。kqhtkvqz4#
创建示例数据:
然后创建一个函数来设置列名:
apeeds0o5#
tidyverse
解决方案与rename_with
:或者,如果仅针对一列:
这也适用于
lapply
:nnt7mjpx6#