R语言按startdate日期列分组计算event字段累计求和的问题
错误原因
你之前的代码问题出在分组后直接计算累计值,cumsum()的作用范围被限制在每个日期分组内部,所以得到的是单天内的逐行累计,不是跨日期的总累计。
修正后的dplyr代码
library(dplyr) my_data_2 <- my_data %>% # 按日期分组,先计算单日event总和 group_by(startdate) %>% summarise(daily_event = sum(event)) %>% # 取消分组,对所有单日总和做全局累计求和 ungroup() %>% mutate(event = cumsum(daily_event)) %>% # 保留需要的字段 select(startdate, event)
逻辑说明
- 第一步
group_by(startdate) %>% summarise(daily_event = sum(event))会先统计每个日期的event总计数,运行到这一步会得到中间结果:startdate daily_event 1 2010-01-01 3 2 2010-01-02 1 3 2010-01-03 2 - 第二步
ungroup() %>% mutate(event = cumsum(daily_event))会对上面的daily_event列做全局累计求和,最终得到你需要的输出结果,和你的预期完全一致:startdate event 1 2010-01-01 3 2 2010-01-02 4 3 2010-01-03 6
注:startdate为POSIXct类型也不需要额外处理,分组逻辑会自动按时间精度匹配。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

