【发布时间】:2019-10-11 09:19:45
【问题描述】:
考虑一些样本数据
library(data.table)
dt1 <- data.table(foo = 1:4, bar = letters[1:4])
dt2 <- data.table(foo1 = 2:5, bar1 = LETTERS[1:4])
我正在尝试通过 non-equi 连接来连接这两个示例 data.tables(这也需要我设置笛卡尔连接选项):
options("datatable.allow.cartesian" = T)
dt3 <- dt1[dt2, on = .(foo < foo1), nomatch = 0L]
dt3 是:
foo bar bar1
1: 2 a A
2: 3 a B
3: 3 b B
4: 4 a C
5: 4 b C
6: 4 c C
7: 5 a D
8: 5 b D
9: 5 c D
10: 5 d D
但是这有两个问题:
- 列
foo没有值 5(这是一个明显的错误) - 列
foo1不存在于输出中(这可能会限制进一步的条件;如果有的话)
为了绕过第二个条件,我试过了:
dt2[, foo11 := foo1]
dt4 <- dt1[dt2, on = .(foo < foo1), nomatch = 0L]
options("datatable.allow.cartesian" = F)
这给了我dt4:
foo bar bar1 foo11
1: 2 a A 2
2: 3 a B 3
3: 3 b B 3
4: 4 a C 4
5: 4 b C 4
6: 4 c C 4
7: 5 a D 5
8: 5 b D 5
9: 5 c D 5
10: 5 d D 5
所以这里foo11 本质上是错误列foo 的副本,它看起来像另一个由于非等连接导致的错误。
我是否遗漏了任何一点或做错了什么?
【问题讨论】:
标签: r data.table