【发布时间】:2015-04-29 03:50:42
【问题描述】:
我有两个表,我想以与以下 SQL 相同的方式将它们连接在一起,其中我在多个条件下连接,而不仅仅是相等。
require(sqldf)
require(data.table)
dt <- data.table(num=c(1, 2, 3, 4, 5, 6),
char=c('A', 'A', 'A', 'B', 'B', 'B'),
bool=c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE))
dt_two <- data.table(
num =c(6, 1, 5, 2, 4, 3),
char=c('A', 'A', 'A', 'B', 'B', 'B'),
bool=c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE))
dt_out_sql <- sqldf('
select dtone.num, dtone.char, dtone.bool, SUM(dttwo.num) as SUM,
MIN(dttwo.num) as MIN
from dt as dtone INNER join dt_two as dttwo on
(dtone.char = dttwo.char) and
(dtone.num >= dttwo.num OR dtone.bool)
GROUP BY dtone.num, dtone.char, dtone.bool')
出于性能和灵活性的原因,我想避免使用 SQL 解决方案。进行交叉连接,然后进行过滤/聚合也是如此——它会创建一个中间表,其中包含许多不必要的记录供我过滤掉。
非常感谢!
更新——我最初的例子是匆忙完成的。在我的实际问题中,我没有进行自我加入。
【问题讨论】:
标签: r data.table