我在R中有一个data.frames列表。我想使用join_all
将它们连接在一起,但它们共有的变量名称并不完全相同。
这是一个示例数据集
compA <- rep(1:35)
compB <- rep(1:35)
compC <- rep(1:35)
valuesa <- rnorm(35)
valuesb <- rnorm(35)
valuesc <- rnorm(35)
A <- data.frame(compA, valuesa)
B <- data.frame(compB, valuesb)
C <- data.frame(compC, valuesc)
list <- list(A, B, C)
这里,CompA,CompB和CompC都是相同的,但'values'变量都是不同的。我想重命名列表中包含“comp”的所有变量,使其具有相同的名称,以便我可以通过“Comp”将列表中的所有数据帧合并为一个数据帧。
JointData <- join_all(list, by="Comp", type='left')
有谁知道怎么做?
这个问题How to find common variables in a list of datasets & reshape them in R?似乎是最接近的,但就我所见,他实际上并没有重命名他的变量。
答案 0 :(得分:2)
我们可以使用lapply
和grep
,如下所示:
lapply(list, function(x){setnames(x, old = grep("comp", names(x)), new = "Comp")})
使用您的代码将为您提供前10行:
> JointData <- join_all(list, by="Comp", type='left')
> JointData
Comp valuesa valuesb valuesc
1 1 1.459809314 1.074395596 0.05459735
2 2 -1.442052931 0.259653583 -0.18003632
3 3 0.856110943 0.020583632 -2.23210988
4 4 -0.458347842 -0.472916330 0.03734474
5 5 0.722777326 0.372389619 -1.18025645
6 6 -1.079007191 1.812031538 0.81196831
7 7 -0.478990080 -0.298745059 -0.22902673
8 8 -0.015821375 0.414506210 -0.20809839
9 9 -0.844872308 -0.208205289 0.53310519
10 10 0.330617594 -0.177282871 -0.67203133