如何重命名包含R中常用短语的数据帧列表中的变量

时间:2017-03-27 03:46:54

标签: r list join merge grep

我在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?似乎是最接近的,但就我所见,他实际上并没有重命名他的变量。

1 个答案:

答案 0 :(得分:2)

我们可以使用lapplygrep,如下所示:

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