使用dplyr实现条件满足时累计时间、不满足时重置为0的计算
实现方案
优先使用dplyr的连续分组逻辑实现,代码简洁且性能优异:
library(dplyr) # 方案1:基于你已生成的dd数据直接计算目标列 result <- dd %>% # 为连续状态相同的行分配唯一分组ID group_by(grp = consecutive_id(condition)) %>% # 条件为真时组内累计求和,为假时直接返回0 mutate(time_condition_wanted = ifelse(condition, cumsum(time_condition), 0)) %>% ungroup() %>% select(-grp) # 若dplyr版本低于1.1.0无consecutive_id,替换分组逻辑即可: result <- dd %>% group_by(grp = cumsum(condition != lag(condition, default = first(condition)))) %>% mutate(time_condition_wanted = ifelse(condition, cumsum(time_condition), 0)) %>% ungroup() %>% select(-grp) # 方案2:从原始数据d一步生成,无需提前计算间隔 result <- d %>% group_by(grp = consecutive_id(condition)) %>% mutate( time_condition_wanted = ifelse( condition, as.numeric(date - first(date)), 0 ) ) %>% ungroup() %>% select(-grp)
运行后验证all(result$time_condition_wanted == should_be)将返回TRUE,完全匹配预期输出。
内容的提问来源于stack exchange,提问作者b_surial
相关产品推荐
相关产品推荐

