我有多个data.tables标题为“x.y.z”。我想创建一个for循环,它将重命名每个data.tables的列,以便每列以“x.y.column的原始名称”开头。因为所有data.tables都有相似的列名,所以当我加入它们时,我想知道列最初来自哪个data.table。
我尝试在setnames()/ colnames()函数中使用paste(“x”,“y”,“z”,sep =“。”),但它不能识别最终结果应该是引用到现有的全局变量(data.table)而不仅仅是一个字符串。
任何帮助都将不胜感激。
答案 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