Скажем, у меня есть кадр данных, содержащий кучу данных и столбец даты/времени, указывающий, когда была собрана каждая точка данных. У меня есть другой фрейм данных, в котором перечислены промежутки времени, где столбец "Старт" указывает дату/время начала каждого интервала, а столбец "Конец" указывает дату/время окончания каждого диапазона.
Я создал фиктивный пример ниже, используя упрощенные данные:
main_data = data.frame(Day=c(1:30))
spans_to_filter =
data.frame(Span_number = c(1:6),
Start = c(2,7,1,15,12,23),
End = c(5,10,4,18,15,26))
Я поиграл с несколькими путями решения этой проблемы и в итоге получил следующее решение:
require(dplyr)
filtered.main_data =
main_data %>%
rowwise() %>%
mutate(present = any(Day >= spans_to_filter$Start & Day <= spans_to_filter$End)) %>%
filter(present) %>%
data.frame()
Это работает отлично, но я заметил, что может потребоваться некоторое время для обработки, если у меня много данных (я предполагаю, что я выполняю сравнение по ряду). Я все еще изучаю все возможности R, и мне было интересно, есть ли более эффективный способ выполнения этой операции, предпочтительно используя dplyr/tidyr?