You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:54:03