如何使用lag函数在R数据框中生成过往爽约标记及频次列
解决方案:新增过往爽约标记与频次统计列
首先需要确保数据按用户和日期正确排序,再结合累积统计函数实现需求,以下是完整代码:
library(dplyr) # 转换日期格式并按用户、日期排序(保证时间顺序正确) df <- df %>% mutate(date = as.Date(date)) %>% arrange(Person, date) # 分组计算目标列 df <- df %>% group_by(Person) %>% mutate( prior_noshow = lag(cummax(NoShow)), prior_noshow_f = lag(cumsum(NoShow)) ) %>% ungroup()
代码解释
mutate(date = as.Date(date)):将原字符型日期转为Date类型,避免字符串排序导致的时间顺序错误arrange(Person, date):按用户分组后,对每个用户的记录按日期升序排列,确保处理顺序符合时间逻辑group_by(Person):每个用户的统计独立进行,不会互相干扰prior_noshow = lag(cummax(NoShow)):cummax(NoShow)计算到当前行为止的最大爽约标记(0或1),lag()取前一行结果,实现"当前记录之前是否有过爽约"的标记prior_noshow_f = lag(cumsum(NoShow)):cumsum(NoShow)计算到当前行为止的爽约总次数,lag()取前一行结果,得到"当前记录之前的爽约频次"
运行后即可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

