我想根据具体的课程,删除dataframe1中日期在dataframe2日期之前的行。
Dataframe1看起来像这样:
参与者ID | 课程 | 日期 | 1 | 生物110 | 2022-02-03 | 2
---|---|---|
生物110 | 2022-02-01 | |
3 | 化学110 | 2022-03-15 |
您可以尝试下面的代码
df <- df1 %>% left_join(df2, by='Course') %>% filter(Date.x>=Date.y)
您需要确保在筛选之前将日期识别为日期。
library(tidyverse)
df_1 <- tibble::tribble(
~Participant.ID, ~Course, ~Date,
1L, "BIO 110", "2022-02-03",
2L, "BIO 110", "2022-02-01",
3L, "CHEM 110", "2022-03-15"
)
df_2 <- tibble::tribble(
~Course, ~Date,
"BIO 110", "2022-02-03",
"CHEM 110", "2022-03-15"
) %>%
dplyr::rename(Min_Date = Date)
dplyr::left_join(df_1, df_2, by = "Course") %>%
dplyr::mutate(Date = lubridate::as_date(Date),
Min_Date = lubridate::as_date(Min_Date)) %>%
dplyr::filter(Date >= Min_Date)
使用purrr
我们可以做:
library(tidyverse)
map2_dfr(df2$Course, df2$Date,
~ df1 %>% filter(Course == .x, Date >= .y))
## # A tibble: 2 x 3
## Participant.ID Course Date
## <int> <chr> <chr>
## 1 1 BIO 110 2022-02-03
## 2 3 CHEM 110 2022-03-15