我有2个数据表。 1 个表包含开始和结束日期范围的列表。另一个表格列出了学生的班级和开始日期。对于每个日期范围,我尝试列出开始日期在该范围内的学生。
范围数据
开始 | 结束 |
---|---|
2023 年 10 月 1 日 | 2023 年 12 月 31 日 |
2023 年 7 月 1 日 | 2023 年 9 月 30 日 |
2023 年 4 月 1 日 | 2023 年 6 月 30 日 |
2023 年 1 月 1 日 | 2023 年 3 月 31 日 |
学生
学习者 | 课程 | 开始 |
---|---|---|
1 | 英语 | 11/5/23 |
1 | 数学 | 7/10/23 |
2 | 英语 | 7/25/23 |
2 | 数学 | 5/15/23 |
3 | 科学 | 4/25/23 |
3 | 数学 | 7/25/23 |
3 | 英语 | 11/15/23 |
4 | 科学 | 11/5/23 |
4 | 数学 | 1/5/23 |
如果我只有一个日期范围可供过滤,我可以使用 filter() 按开始日期进行过滤,但我有十几个不同的范围,并且不想为每个范围手动运行。我的预期结果是一个范围列表,学生在该范围内上课
开始 | 结束 | 学习者 |
---|---|---|
2023 年 10 月 1 日 | 2023 年 12 月 31 日 | 1 |
2023 年 10 月 1 日 | 2023 年 12 月 31 日 | 3 |
2023 年 10 月 1 日 | 2023 年 12 月 31 日 | 4 |
2023 年 7 月 1 日 | 2023 年 9 月 30 日 | 1 |
2023 年 7 月 1 日 | 2023 年 9 月 30 日 | 2 |
2023 年 7 月 1 日 | 2023 年 9 月 30 日 | 3 |
2023 年 4 月 1 日 | 2023 年 6 月 30 日 | 2 |
2023 年 4 月 1 日 | 2023 年 6 月 30 日 | 3 |
2023 年 1 月 1 日 | 2023 年 3 月 31 日 | 4 |
mutate(df1, across(everything(), mdy)) %>%
right_join(mutate(df2, Start = mdy(Start)),
by = join_by(Start <= Start , End>Start),
suffix = c('', '_y'))%>%
select(-Start_y, -Course)
Start End Learner
1 2023-10-01 2023-12-31 1
2 2023-10-01 2023-12-31 3
3 2023-10-01 2023-12-31 4
4 2023-07-01 2023-09-30 1
5 2023-07-01 2023-09-30 2
6 2023-07-01 2023-09-30 3
7 2023-04-01 2023-06-30 2
8 2023-04-01 2023-06-30 3
9 2023-01-01 2023-03-31 4