r - 在循环中更改许多数据框的列名
问题描述
我有三个数据框 EC_Data、ED_Data 和 ST_data,它们都具有相同的列名,更具体地说,在第 4 列之后,从 2006 年到 2015 年的列名为年份
所以我创建了一个包含所有三个数据框的新列表:
Alldata = list(EC_Data, ED_Data, ST_Data)
所以我试图重命名for循环中的所有列,如下所示......
for(x in seq_along(Alldata))
{
for(j in seq_along(Alldata[[x]]))
{
if(j>4)
{
names(colnames(Alldata[[x]][j])) <- paste("X", substr(colnames(Alldata[[x]][j]), start = 1, stop = 5),sep="")
print(colnames(Alldata[[x]][j]))
}
}
}
但是什么也没有发生...
我不明白为什么,因为当我尝试调用每个列表的名称时,例如
view(colnames(Alldata[[2]]))
这些名字似乎正是我想看到的
有人可以帮我理解这个循环不起作用的原因以及我可以用什么来代替它吗?
谢谢
解决方案
如果我们想重命名所有lapply
用于循环的列list
,paste
使用substr
现有列名的 , 并将它们分配给setNames
Alldata <- lapply(Alldata, function(x)
setNames(x, paste0("X", substr(colnames(x), 1, 5))))
或使用for
循环
for(i in seq_along(Alldata)) {
Alldata[[i]] <- setNames(Alldata[[i]],
paste0("X", substr(colnames(Alldata[[i]]), 1, 5))
}
推荐阅读
- java - 包含不同对象的 2 个列表的公共部分
- javascript - Puppeteer - 获取父元素
- reactjs - 带有 TypeError 结果的 Netlify 部署:无法读取未定义的属性“替换”
- linux - 将输出发送到另一个命令
- javascript - 如果在内部单击并在外部释放鼠标,则模式关闭
- php - 本地主机/~用户名/不适用于 Mojave
- ios - 迅速。Xcode 10.2.1。错误线程 1:EXC_BAD_ACCESS (code=2,...) - 在屏幕之间导航
- javascript - 从看板移动卡片
- c++ - 如何将矩阵从局部坐标更改为世界坐标?
- javascript - Sequelize bulkCreate() 保存前一天