根据存储在另一个 Dataframe 中的日期和组对每个组中的条目进行子集化

wydwbb8l  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(101)

我希望根据特定课程删除dataframe1中日期早于dataframe2中日期的行。
Dataframe 1如下所示:
| 参与者ID|课程|日期|
| - ------|- ------|- ------|
| 1个|生物110|2022年2月3日|
| 第二章|生物110|2022年2月1日|
| 三个|化学110|2022年3月15日|
Dataframe 2如下所示:
| 课程|日期|
| - ------|- ------|
| 生物110|2022年2月3日|
| 化学110|2022年3月15日|
所需输出:
| 参与者ID|课程|日期|
| - ------|- ------|- ------|
| 1个|生物110|2022年2月3日|
| 三个|化学110|2022年3月15日|

px9o7tmv

px9o7tmv1#

您可以尝试以下代码

df <- df1 %>% left_join(df2, by='Course') %>% filter(Date.x>=Date.y)
avwztpqn

avwztpqn2#

您需要确保在筛选之前将日期识别为日期。

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)
wd2eg0qa

wd2eg0qa3#

使用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

相关问题