基于dplyr按时间戳计算跨时段累计和的实现方法咨询
累计激活率计算问题解答
可行性说明
可以单步实现该需求,你当前分年度单独赋值的写法冗余度高,后续新增年份还要重复编写过滤逻辑,用聚合+累计求和的方式可以一步得到所有年份的累计激活率结果。
推荐工具包
- 推荐使用R语言
tidyverse生态下的dplyr+lubridate组合,是业内做结构化数据统计的常用工具包,无需额外复杂配置即可实现需求。 - 如果不想引入过多依赖,仅用
dplyr也可以完成计算,只需调整年份提取逻辑即可。
实现代码
# 加载依赖包 library(dplyr) library(lubridate) # 单步计算所有年份的累计激活率 cum_activate_result <- activate_rate %>% # 从join_day中提取入职年份,如果join_day是字符格式且前四位为年份,也可替换为 substr(join_day,1,4) mutate(join_year = year(ymd(join_day))) %>% # 按入职年份分组,汇总单年的激活人数和总样本量 group_by(join_year) %>% summarise( year_activate_num = sum(if_activate), year_total_num = n() ) %>% # 按年份升序排序后计算累计值 arrange(join_year) %>% mutate( cum_activate_num = cumsum(year_activate_num), cum_total_num = cumsum(year_total_num), # 累计激活率 = 累计激活人数 / 累计总样本量,和你原代码逻辑完全一致 cum_activate_rate = cum_activate_num / cum_total_num )
结果使用说明
最终输出的cum_activate_result表中,每一行的cum_activate_rate即为截止到对应年份的累计激活率:
- 2019行的结果对应你原代码的
activate_2019 - 2020行的结果对应你原代码的
activate_2020 - 以此类推,后续新增年份无需修改代码即可自动计算对应累计值
内容的提问来源于stack exchange,提问作者suzmiu
相关产品推荐
相关产品推荐

