假设我有以下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等
答案 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')
我将把这个部分改为适应你的第三个数据。作为练习。