我正在尝试连接两个数据框(data.tables),x和y,在x $ val> = y $ start&x $ val <= y $ end . 我不能使用dplyr,因为在dplyr中进行不等式连接的唯一方法是连接表然后过滤不等式,我想要加入的表有315k和84k记录 . 这会炸掉记忆 .
data.table确实有不等式连接,但我不能为我的生活弄清楚语法是如何工作的 . 看到这个结果:
x <- data.table(val = c(1:5), id = "a")
y <- data.table(start = c(1:5), end = c(11:15), id= "a")
x[y, on=c("val>=start","val<=end"),
.(start, val, end)]
start val end
1: 1 1 11
2: 1 1 11
3: 1 1 11
4: 1 1 11
5: 1 1 11
6: 2 2 12
7: 2 2 12
8: 2 2 12
9: 2 2 12
10: 3 3 13
11: 3 3 13
12: 3 3 13
13: 4 4 14
14: 4 4 14
15: 5 5 15
为了展示我期望得到的东西,这是dplyr产生的:
x <- data.table(val = c(1:5), id = "a")
y <- data.table(start = c(1:5), end = c(11:15), id= "a")
x %>%
inner_join(y) %>%
filter(val >= start & val <= end)
val id start end
1 1 a 1 11
2 2 a 1 11
3 2 a 2 12
4 3 a 1 11
5 3 a 2 12
6 3 a 3 13
7 4 a 1 11
8 4 a 2 12
9 4 a 3 13
10 4 a 4 14
11 5 a 1 11
12 5 a 2 12
13 5 a 3 13
14 5 a 4 14
15 5 a 5 15
任何人都可以用data.table语法解释它是什么吗?
1 回答
您需要从左表中选择带有前缀(
x.
)的val
列;有关更多信息,请参阅this answer: