r语言 - 根据存储在另一个数据框架中的日期和组,对每个组中的条目进行子集



我想根据具体的课程,删除dataframe1中日期在dataframe2日期之前的行。

Dataframe1看起来像这样:

tbody> <<tr>2
参与者ID 课程 日期
1生物1102022-02-03
生物1102022-02-01
3化学1102022-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

相关内容

  • 没有找到相关文章

最新更新