【发布时间】:2020-05-05 16:00:14
【问题描述】:
我有一个看起来像这样的 df
ID FINAL_DT START_DT
23 NA 2020-03-20
25 NA 2020-04-10
29 2020-02-02 2020-01-23
30 NA 2020-01-02
我想做的是为每个 ID 添加一行,每个月从 START_DT 开始,到第一个 FINAL_DT 或当前日期结束。预期输出如下:
ID FINAL_DT START_DT ACTIVE_MONTH
23 NA 2020-03-20 2020-03
23 NA NA 2020-04
23 NA NA 2020-05
25 NA 2020-04-10 2020-04
25 NA NA 2020-05
29 2020-02-02 2020-01-23 2020-01
29 2020-02-02 NA 2020-02
30 NA 2020-01-02 2020-01
30 NA NA 2020-02
30 NA NA 2020-03
30 NA NA 2020-04
30 NA NA 2020-05
我有以下代码可以工作,但不考虑 FINAL_DT
current_date = as.Date(Sys.Date())
enroll <- enroll %>%
group_by(ID) %>%
complete(START_DATE = seq(START_DATE, current_date, by = "month"))
我尝试了以下方法,但我认为由于 NA 的原因而出现错误:
current_date = as.Date(Sys.Date())
enroll <- enroll %>%
group_by(ID) %>%
complete(START_DATE = seq(START_DATE, min(FINAL_DT,current_date), by = "month"))
一个月中的哪一天也无关紧要,我不确定在之前还是之后删除它会更容易。
【问题讨论】: