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

Lee*_*ren 4 r

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

d1:

       X     Y    Z    value
1      0    20   135    43
2      0     4   105    50
3      5    18    20    10
...
Run Code Online (Sandbox Code Playgroud)

d2:

       X     Y    Z    value
1      0    20   135    15
2      0     4   105    14
3      2     9    12    16
...
Run Code Online (Sandbox Code Playgroud)

d3:

       X     Y    Z    value
1      0    20   135    29
2      2     9    14    16
...
Run Code Online (Sandbox Code Playgroud)

我希望能够组合这些数据帧,使得组合数据帧的每一行由三个值组成,基于所有独特的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
...
Run Code Online (Sandbox Code Playgroud)

有没有有效的方法呢?我尝试过这样做而不是使用data.table它似乎更适合这个,但尚未弄清楚如何.

Arc*_*tte 6

?merge
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩?

 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.
Run Code Online (Sandbox Code Playgroud)

所以:

merge(d1,d2, by=c("X","Y","Z"))
Run Code Online (Sandbox Code Playgroud)

并且您可以包括all = T,以获得完整的行.丢失的数据将是NA

    merge(d1,d2, by=c("X","Y","Z"), all=TRUE)
Run Code Online (Sandbox Code Playgroud)