【发布时间】:2021-11-01 02:57:03
【问题描述】:
我的问题类似于this,但是,它并不能完全解决我的问题。
我正在尝试创建以特定间隔重复的累积数字序列。例如,如果我有一个如下所示的数据框:
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$number 列就是cumsum(dfTest$ID=="P")。但我想做的是创建另一个列,该列基本上包含来自dfTest$number...的值,但每次dfTest$iteration 列发生变化时都会重新启动。例如,我想要的输出是:
> 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
在这里,我们可以看到dfTest$Counter 增加了,就像dfTest$number...但是一旦dfTest$iteration 的值发生变化,dfTest$Counter 就会重新开始。
【问题讨论】:
-
库(dplyr); df %>% group_by(iteration) %>% mutate(Counter = cumsum(ID == "P")`
-
标签: r