首页 > 解决方案 > 在循环中更改许多数据框的列名

问题描述

我有三个数据框 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]])) 

这些名字似乎正是我想看到的

有人可以帮我理解这个循环不起作用的原因以及我可以用什么来代替它吗?

谢谢

标签: rloopsdataframemultiple-columns

解决方案


如果我们想重命名所有lapply用于循环的列listpaste使用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))
  }

推荐阅读