Я пытаюсь фильтровать строки кадра данных на основе столбцов в другой дейтаграмме. По сути, я хочу извлекать строки с одинаковыми идентификаторами, где позиция находится между началом и концом. Есть дополнительная уловка, заключающаяся в том, что идентификаторы форматируются по-другому. наконец, объем данных, задействованных в скрипте, очень велик, поэтому для экономии памяти или скорости полезно иметь. был бы благодарен за несколько советов.
library(dplyr)
df1 <- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
pos = c(30, 40, 50, 35, 45, 55, 60, 63, 39))
df2 <- data.frame(idstr = c("id1", "id1", "id3", "id4", "id4"),
start=c(30, 20, 30, 40, 20 ),
end = c(40, 30, 50, 60, 45))
df.base <- df1[ paste0("id", df1$id) == df2$idstr &&
df1$pos >= df2$start &&
df1$pos <= df2$end,]
df.dplyr <- df1 %>%
left_join(df2, by = c('id' == 'idstr') ) %>%
filter(pos >= start & pos <= end) %>%
select(id, pos)
edit: ожидаемый результат, строки из df1 соответствуют условию (их позиция находится в диапазоне df2 с тем же идентификатором), поэтому, если нет ошибки: id , поз 1, 30 1, 40 3, 39
объяснение: например, df1 [3,] id == 1 и pos == 50 глядя на df2, нет строки, где df2 $ id == "id1" и df2 $ start < = 50 и df2 $ end> = 50, поэтому df1 [3,] будет отфильтрован.