根据相似的列值将数据框连接在一起

时间:2015-05-07 07:16:26

标签: r

具体来说,我说有三个数据框d1, d2, d3

d1

       X     Y    Z    value
1      0    20   135    43
2      0     4   105    50
3      5    18    20    10
...

d2

       X     Y    Z    value
1      0    20   135    15
2      0     4   105    14
3      2     9    12    16
...

d3

       X     Y    Z    value
1      0    20   135    29
2      2     9    14    16
...

我希望能够组合这些数据帧,使得组合数据帧的每一行由三个值组成,基于所有独特的X,Y,Z组合。如果在原始数据帧之一中不存在这样的X,Y,Z组合,那么我只希望它具有null值(或者如果不可能则具有任意低的数值)。所以我想要输出:

dfinal

       X     Y    Z    value1  value2  value3
1      0    20   135     43      15      29
2      0     4   105     50      14     null
3      5    18    20     10     null    null
4      2     9    12    null     16     null
5      2     9    14    null    null     16
...

有没有有效的方法呢?我尝试使用data.table来做这件事,这似乎更适合这个,但还没弄明白。

2 个答案:

答案 0 :(得分:6)

?merge

应该做的伎俩?

 By default the data frames are merged on the columns with names they both have, but separate specifications of the columns can be given by by.x and by.y.

所以:

merge(d1,d2, by=c("X","Y","Z"))

您可以包含all = T,以获得完整的行。 缺失的数据将是NA

    merge(d1,d2, by=c("X","Y","Z"), all=T)

答案 1 :(得分:2)

看看dplyr及其连接方法。我写了一个小例子:

library(dplyr)
library(data.table)

d1 <- data.table(X = c(1,2,3), Y = c(2,3,4), Z = c(8,3,9), value = c(22,3,44))
d2 <- data.table(X = c(1,4,3), Y = c(2,6,4), Z = c(8,9,9), value = c(44,22,11))

d2 <- rename(d2, value2 = value)


full_join(d1,d2)

输出:

  X Y Z value value2
1 1 2 8    22     44
2 2 3 3     3     NA
3 3 4 9    44     11
4 4 6 9    NA     22
相关问题