创建for循环以重命名R中几个数据表的所有列

时间:2015-02-01 04:01:02

标签: r for-loop data.table rename

我有多个data.tables标题为“x.y.z”。我想创建一个for循环,它将重命名每个data.tables的列,以便每列以“x.y.column的原始名称”开头。因为所有data.tables都有相似的列名,所以当我加入它们时,我想知道列最初来自哪个data.table。

我尝试在setnames()/ colnames()函数中使用paste(“x”,“y”,“z”,sep =“。”),但它不能识别最终结果应该是引用到现有的全局变量(data.table)而不仅仅是一个字符串。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

“data.table”对象名称的“模式”不是很清楚。根据您的描述

  

我有多个data.tables标题为“x.y.z”。

我创建了一些“data.table”对象('x1.y1.z','x1.y2.z',..)。

nm1 <- ls(pattern='^x.*.')
nm1
#[1] "x1.y1.z" "x1.y2.z" "x2.y1.z" "x2.y2.z"

循环访问对象名称(“nm1”),使用sub删除'.z'部分,获取对象的名称(“colNm”),使用{创建新名称(“newNm”) {1}},并使用paste

更改列名称
setnames

数据

for(i in seq_along(nm1)){
  temp <- nm1[i]
  temp1 <- sub('..$', '', temp)
  colNm <- names(get(temp))
  newNm <- paste(temp1, colNm, sep='.')
  setnames(get(temp), colNm, newNm)
 }

 head(x1.y1.z,2)
 #   x1.y1.V1 x1.y1.V2 x1.y1.V3 x1.y1.V4
 #1:        6       13        2        7
 #2:        5        8       12        5
 head(x2.y1.z,2)
 #   x2.y1.V1 x2.y1.V2 x2.y1.V3 x2.y1.V4
 #1:       10       10       10        3
 #2:        8       18        5        5