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:bc在这种情况下,
  • 只保留 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].

以上是data.tablejoin很难理解的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>