Ho due tabelle che vorrei unire insieme in un modo equivalente al seguente SQL, dove mi unisco su più condizioni, non solo l'uguaglianza.R Data.Table Join on Conditionals
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')
Vorrei evitare la soluzione SQL, sia per motivi di prestazioni che di flessibilità. Lo stesso vale per fare un cross join, e quindi filtrare/aggregare - creerebbe una tabella intermedia con un sacco di record non necessari da filtrare.
Grazie mille!
Aggiornamento - il mio esempio iniziale è stato fatto in fretta. Nel mio vero problema, non sto facendo un auto join.
I benchmarked delle possibili opzioni, e questo in realtà si è rivelato il più veloce. In questo caso, posso vivere con brutto. :) – Netbrian