data.tablejoin很难理解
我正在 R 中学习 data.table。这个连接让我困惑了几个小时。有人可以帮我理解吗?
library(data.table)
DT = data.table(x = rep(c("b", "a", "c"), each = 3),
y = c(1, 3, 6),
v = 1:9)
DT
#> x y v
# 1: b 1 1
# 2: b 3 2
# 3: b 6 3
# 4: a 1 4
# 5: a 3 5
# 6: a 6 6
# 7: c 1 7
# 8: c 3 8
# 9: c 6 9
X = data.table(x = c("c", "b"),
v = 8:7,
foo = c(4, 2))
X
#> x v foo
# 1: c 8 4
# 2: b 7 2
而这个加入结果超出了我的范围。
DT[X, on = .(x, y <= foo)]
#> x y v i.v
# 1: c 4 7 8
# 2: c 4 8 8
# 3: b 2 1 7
它在做什么?
回答
这是一个非对等连接:
- 加入这两个表相同的X:
b和c在这种情况下, - 只保留 DT 的值,其中
DT$y <= X$foo
或许这样更容易理解:
DT[X,.(x.x, x.y, x.v, i.x, i.v, i.foo,`y < foo`= x.y < i.foo ), on = .(x = x, y <= foo)]
x.x x.y x.v i.x i.v i.foo y < foo
1: c 1 7 c 8 4 TRUE
2: c 3 8 c 8 4 TRUE
3: b 1 1 b 7 2 TRUE
在哪里:
x.是LHS表的列(DT)i.是RHS表 (X)的列,要记住i.考虑DT[i,j,by].