【问题标题】:Changing column names of many dataframes in a loop在循环中更改许多数据框的列名
【发布时间】:2020-07-06 18:51:28
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 你不需要 names(colnames(...)) 只是 colnames(...) 工作吗?
  • 我做的第一件事是...只是列名,但结果是一样的。

标签: r loops dataframe multiple-columns


【解决方案1】:

如果我们要重命名所有列,请使用lapply 循环使用现有列名的substrlistpaste,并使用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))
  }

【讨论】:

  • lapply 像你说的那样工作。非常感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
相关资源
最近更新 更多