将data.tables合并为2列,表示可变排序的对

时间:2016-04-11 17:44:06

标签: r data.table

假设我有以下data.tables:

X1 X2 val1
A  B  1
B  C  2
C  A  3

X1 X2 val2
A  B  100
C  B  200
A  C  300

其中(X1,X2)的每个组合在每个data.table中出现一次,但排序是不确定的。我瞄准这个输出:

X1 X2 val1 val2
A  B  1    100
B  C  2    200
C  A  3    300

最有效的方法是什么?特别是如果第3个data.table包含具有相同情况的第3个值列:re,X1,X2等

1 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

special_join <- function(x, y, xcols, ycols=xcols) {
    ix1 = y[x, on=structure(xcols, names=ycols), which=TRUE]
    ix2 = y[x, on=structure(rev(xcols), names=ycols), which=TRUE]
    pmax(ix1, ix2, na.rm=TRUE)
}
ix = special_join(dt1, dt2, names(dt1)[1:2])
dt1[, val2 := dt2$val2[ix]]

其中,

dt1 = fread('X1 X2 val1
A  B  1
B  C  2
C  A  3')

dt2 = fread('X1 X2 val2
A  B  100
C  B  200
A  C  300')

我将把这个部分改为适应你的第三个数据。作为练习。