【发布时间】:2022-01-27 08:15:38
【问题描述】:
我想改变原始 df 以添加一列来计算自上次数学(“M”)缺席以来的天数。我希望学生数学缺勤的第一次出现为 NA,如果之前没有任何数学缺勤,我希望该值为 Inf。
我按日期订购了 df,然后写出了这行代码:
df %>% groupby(Student_ID) %>% mutate(dayssinceM = ifelse(Subject == "M", c(NA, diff(Absent_Date)), Inf))
这一直有效,直到学生后来在数据中出现数学缺失。我尝试添加另一个 ifelse 语句:ifelse(lag(Subject == "M", c(NA, diff(Absent_Date)), Inf)),但它只有在之前直接缺席数学时才有效。我希望学生以前有任何数学缺席。我在想也许以某种方式添加rollapply。我很想听听您的想法并获得帮助。
原始df:
Studen_ID Absent_Date Subject
4567 08/30/2018 M
4567 09/22/2019 M
8345 09/01/2019 SS
8345 03/30/2019 S
8345 07/18/2017 S
8345 01/08/2019 M
这是所需的输出:
Student_ID Absent_Date Subject dayssinceM
4567 08/30/2018 M NA
4567 09/22/2019 M 388
8345 07/18/2017 S Inf
8345 01/08/2019 M NA
8345 03/30/2019 S 81
8345 09/01/2019 SS 236
【问题讨论】: