“data.table”对象名称的“模式”不是很清楚。根据您的描述
我有多个以“x.y.z”形式命名的data.tables。
我创建了一些“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”),使用paste创建新名称(“newNm”) , 并用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
数据
set.seed(24)
x1.y1.z <- as.data.frame(matrix(sample(1:20, 10*4, replace=TRUE),ncol=4))
x2.y1.z <- as.data.frame(matrix(sample(1:20, 10*4, replace=TRUE), ncol=4))
x1.y2.z <- as.data.frame(matrix(sample(1:20, 10*4, replace=TRUE), ncol=4))
x2.y2.z <- as.data.frame(matrix(sample(1:20, 10*4, replace=TRUE), ncol=4))
setDT(x1.y1.z); setDT(x2.y1.z); setDT(x1.y2.z); setDT(x2.y2.z)