【发布时间】:2019-10-23 13:38:35
【问题描述】:
我有两个数据框 ID_list 和 Attendance:
ID_list 包含一个唯一 ID 列表、他们的出生日期和他们随后几年的生日
ID DOB Y1 Y2 Y3
1 01/05/2003 01/05/2004 01/05/2005 01/05/2006
2 05/02/2010 05/02/2011 05/02/2012 05/02/2013
3 17/06/2015 17/06/2016 17/06/2017 17/06/2018
Attendance 包含一个 ID 列表,其中一些与 ID_list 中的 ID 和不同日期的出席率数字相匹配:
ID 01/07/2010 01/07/2011 01/07/2012
4 100% 50% 75%
2 60% 40% 30%
6 80% 60% 100%
我想生成一个新的数据框,其中包含 ID 列表及其生命中每一年的出勤率,其中 Attendance 数据框的列标题中指定的日期介于 @ 中的两个日期之间987654329@ 数据框。根据上面的例子,它看起来像这样:
ID Y1_att Y2_att Y3_att
1 NA NA NA
2 60% 40% 30%
3 NA NA NA
我一直在尝试将%within% 和interval 函数与mutate 结合使用:
ID_all <- left_join(ID_list, Attendance, by = ID)
ID_all <- mutate(ID_all, Y1_att = ifelse(**column name** %within% interval(DOB, Y1), **value from column name**, NA)
星号中的值取自 Attendance 数据框。然后的想法是遍历从 Attendance 数据框中获取的列,但我不确定如何在 mutate 函数中引用列,同时在计算中使用它,或者是否有更好的方法来做到这一点而不是从一开始就加入两个数据框。
【问题讨论】:
-
只是为了在提供的示例中澄清 -
ID=2在Attendance中的日期与ID_list中的日期不重叠 - 这是错误还是我误解了? -
@Ben 谢谢,这是一个错字 - 现在更正了。
标签: r dplyr left-join lubridate