R语言如何实现按迭代分组重置的累积计数序列
按分组重置的累积序列生成方案
需要在现有数据框中新增Counter列,计数逻辑与number列(即cumsum(ID == "P")的计算结果)一致,且每当iteration列值变化时,Counter从1重新开始计数。
示例数据
dfTest <- data.frame( ID = c("P", "L", "R", "P", "L", "R", "P", "L", "R", "P", "L", "R", "P", "L", "R", "P", "L", "R", "P", "L", "R", "P", "L", "R", "LL", "LR"), number = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8), iteration = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) )
原始数据输出:
> dfTest ID number iteration 1 P 1 1 2 L 1 1 3 R 1 1 4 P 2 1 5 L 2 1 6 R 2 1 7 P 3 1 8 L 3 1 9 R 3 1 10 P 4 1 11 L 4 1 12 R 4 1 13 P 5 2 14 L 5 2 15 R 5 2 16 P 6 2 17 L 6 2 18 R 6 2 19 P 7 2 20 L 7 2 21 R 7 2 22 P 8 2 23 L 8 2 24 R 8 2 25 LL 8 2 26 LR 8 2
预期输出
> dfTest ID number iteration Counter 1 P 1 1 1 2 L 1 1 1 3 R 1 1 1 4 P 2 1 2 5 L 2 1 2 6 R 2 1 2 7 P 3 1 3 8 L 3 1 3 9 R 3 1 3 10 P 4 1 4 11 L 4 1 4 12 R 4 1 4 13 P 5 2 1 14 L 5 2 1 15 R 5 2 1 16 P 6 2 2 17 L 6 2 2 18 R 6 2 2 19 P 7 2 3 20 L 7 2 3 21 R 7 2 3 22 P 8 2 4 23 L 8 2 4 24 R 8 2 4 25 LL 8 2 4 26 LR 8 2 4
实现方案
基础R实现
使用ave函数按iteration分组执行累积求和:
dfTest$Counter <- ave(dfTest$ID == "P", dfTest$iteration, FUN = cumsum)
dplyr实现
使用分组求和逻辑:
library(dplyr) dfTest <- dfTest %>% group_by(iteration) %>% mutate(Counter = cumsum(ID == "P")) %>% ungroup()
两种方案输出结果均与预期一致。
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

