Tôi có hai bảng mà tôi muốn tham gia với nhau theo cách tương đương với SQL sau, nơi tôi tham gia vào nhiều điều kiện, không chỉ là bình đẳng.R Data.Table Tham gia vào điều kiện
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')
Tôi muốn tránh giải pháp SQL, vì cả lý do hiệu suất và tính linh hoạt. Cũng vậy khi thực hiện một phép nối chéo, và sau đó lọc/tổng hợp - nó sẽ tạo ra một bảng trung gian với nhiều bản ghi không cần thiết để tôi lọc ra.
Cảm ơn bạn rất nhiều!
Cập nhật - ví dụ ban đầu của tôi đã được thực hiện trong sự vội vàng. Trong vấn đề thực tế của tôi, tôi không tự tham gia.
Tôi đã đánh giá từng câu hỏi của các tùy chọn có thể, và điều này thực sự hóa ra là nhanh nhất. Trong trường hợp này, tôi có thể sống với xấu xí. :) – Netbrian