R语言分组计算序列净留存占比 lead函数应用问题
问题核心
你之前用lead不符合需求的原因是lead只能提取相邻下一行的单个值,而你需要的是同分组内所有序号大于当前行的计数总和,用反向累加即可高效实现,不需要额外安装第三方包。
实现代码
library(dplyr) df <- df %>% group_by(tier_1) %>% # 分组内按序号升序排列,保证顺序正确 arrange(sequence_number, .by_group = TRUE) %>% mutate( # 计算所有序号更大的计数总和:反向累加后减去当前行计数 sum_larger = rev(cumsum(rev(count_of_sequence_numbers))) - count_of_sequence_numbers, # 计算净计数 net_count = count_of_sequence_numbers - sum_larger, # 同组内用净计数计算占比 percent = net_count / sum(net_count) ) %>% # 可根据需要删除中间辅助列 select(-sum_larger)
逻辑验证
以你示例中Organic Search分组为例:
- sequence_number=1的
count_of_sequence_numbers为1176,后面序号2到10的计数总和为460+119+41+21+5+8+6+2+1=663,净计数为1176-663=513,和代码计算结果一致。
内容的提问来源于stack exchange,提问作者hachiko
相关产品推荐
相关产品推荐

