У меня есть фрейм данных df1 со столбцом идентификатора и столбцом временного интервала смазки, и я хочу отфильтровать (отобрать) фрейм данных df2, в котором есть столбцы ID и DateTime, чтобы только строки df2 с DateTime соответствовали соответствующему интервалу IDв дф1 сохранены.Я хочу сделать это в рамках Tidyverse.
Это легко сделать с помощью объединения (см. Пример ниже), но я хотел бы знать, будет ли более прямое решение (возможно, основанное на purrr), которое позволит избежатьприсоединение и затем удаление данных временного интервала из второго кадра данных.Спасибо.
Вопрос, размещенный здесь Объединить два кадра данных, если временная метка x находится в пределах временного интервала y , близка к заданной здесь, но предлагаемое решение было похоже на тот, который я разработал, и нев Tidyverse Framework.
Минимальный код, чтобы показать проблему и мое текущее решение:
library(tibble)
library(lubridate)
df1 <- tribble(
~ID, ~Date1, ~Date2,
"ID1", "2018-04-16", "2018-06-14",
"ID2", "2018-04-20", "2018-06-25")
df1 <- mutate(df1,Interval = interval(ymd(Date1),ymd(Date2)))
df2 <- tribble(
~ID, ~DateTime,
"ID1", "2018-04-12",
"ID1", "2018-05-05",
"ID2", "2018-04-23",
"ID2", "2018-07-12")
df2 <- mutate(df2,DateTime=ymd(DateTime))
df1 выглядит так
> df1
# A tibble: 2 x 4
ID Date1 Date2 Interval
<chr> <chr> <chr> <S4: Interval>
1 ID1 2018-04-16 2018-06-14 2018-04-16 UTC--2018-06-14 UTC
2 ID2 2018-04-20 2018-06-25 2018-04-20 UTC--2018-06-25 UTC
и df2 так:
> df2
# A tibble: 4 x 2
ID DateTime
<chr> <date>
1 ID1 2018-04-12
2 ID1 2018-05-05
3 ID2 2018-04-23
4 ID2 2018-07-12
В df2 вторая запись для ID1 находится вне интервала ID1 в df1.Вторая запись для ID2 также не входит в интервал ID2 в df1.
Мое текущее решение, основанное на объединении и удалении объединенного столбца, выглядит следующим образом:
df_out <- df2 %>%
left_join(.,df1,by="ID") %>%
filter(.,DateTime %within% Interval) %>%
select(.,-Interval)
> df_out
# A tibble: 2 x 4
ID DateTime Date1 Date2
<chr> <date> <chr> <chr>
1 ID1 2018-05-05 2018-04-16 2018-06-14
2 ID2 2018-04-23 2018-04-20 2018-06-25
У меня такое чувство, что я наблюдаю ситуациюдолжна существовать альтернатива, позволяющая избежать объединения и последующего удаления столбца Interval.