我有一张看起来像这样的桌子:
subject amount
1 12
1 12
1 24
2 10
2 10
3 8
3 8
3 9
3 10
4 16
5 13
5 13
5 13
5 27
5 29
6 23
6 23
我希望在数据框中添加一个新列,该列的运行计数在数量变化时增加 1,并在主题变化时重置:
subject amount Count
1 12 1
1 12 1
1 24 2
2 10 1
2 10 1
3 8 1
3 8 1
3 9 2
3 10 3
4 16 1
5 13 1
5 15 2
5 15 2
5 27 3
5 29 4
6 23 1
6 23 1
我尝试做与此处看到的答案类似的操作:列中的每个更改都增加 1 但这仅适用于一列中的数据,因此它不适用于我正在寻找的内容。
我们可以将
cumsum
和 diff
与 mutate
/.by
或 ave
一起使用
# 1 - tidyverse
library(dplyr)
dat %>%
mutate(Count = cumsum(c(1, diff(amount) != 0)), .by = subject)
# 2 - base R
dat |>
transform(Count = ave(amount, subject, FUN = \(x) cumsum( c(1, diff(x) != 0) )))