Я пытаюсь объединить две очень большие таблицы, основанные на условном выражении.Я хочу присоединить df2 к df1 в каждой группе (x), но включить только строки из df2, которые попадают в минимальное и максимальное значения в df2.
df1 <- data.frame(x = c(1,1,1,1,2,2,2,2,2,3), y = seq(1,10))
df2 <- data.frame(x2 = c(1,1,2,2,2), y_min = c(1, 1, 6, 6, 6), y_max = c(3,3,9,9,9), cat = c("A",'A','S','S','S'))
Результат, который я ищу, равен
df3 <- data.frame(x = c(1,1,1,1,2,2,2,2,2,3), y = seq(1,10), y_min = c(1,1,1,NA,NA,6,6,6,6,NA), y_max = c(3,3,3,NA,NA,9,9,9,9,NA), cat = c('A','A','A',NA,NA,'S','S','S','S',NA))
x y y_min y_max cat
1 1 1 1 3 A
2 1 2 1 3 A
3 1 3 1 3 A
4 1 4 NA NA <NA>
5 2 5 NA NA <NA>
6 2 6 6 9 S
7 2 7 6 9 S
8 2 8 6 9 S
9 2 9 6 9 S
10 3 10 NA NA <NA>
Первоначально он был написан в сценарии SAS PROC SQL, но у меня возникли проблемы с его преобразованием в R. Оператор SQL PROC выглядел примерно так ...
PROC SQL;
SELECT a.*, b.*
FROM tbl1 a
LEFT JOIN tbl2 b
on (a.col1 - b.col1) >= 0 and (a.col1 - b.col2) <= 0
and a.id = b.id
Я пыталсяиспользую base :: & data.table :: merge, но мне не повезло.Любая помощь будет принята с благодарностью.