具体来说,我说有三个数据框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
来做这件事,这似乎更适合这个,但还没弄明白。
答案 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