将一个表中的条件应用于另一个表中的每一行以生成匹配列表

问题描述 投票:0回答:1

我有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
r function loops vector rstudio
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.