在 R 中,在数据框中创建一个新列,该新列根据一列的值递增并根据另一列的值重置

问题描述 投票:0回答:1

我有一张看起来像这样的桌子:

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 但这仅适用于一列中的数据,因此它不适用于我正在寻找的内容。

r
1个回答
0
投票

我们可以将

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) )))
© www.soinside.com 2019 - 2024. All rights reserved.