tidyverse中的分组事件链ID

tidyverse中的分组事件链ID,r,tidyverse,R,Tidyverse,我正在尝试为我的数据帧创建一个ID列,该列对一系列事件进行计数,但无法找出错误所在 数据如下所示: 数据 library(tidyverse) df <- tribble( ~group, ~value, "a", 4, "a", 3, "a", 10, "b", 2, "b", 4, "a", 20, "a", 14

我正在尝试为我的数据帧创建一个ID列,该列对一系列事件进行计数,但无法找出错误所在

数据如下所示:

数据

library(tidyverse)

df <- tribble(
  ~group, ~value,
  "a", 4,
  "a", 3,
  "a", 10,
  "b", 2,
  "b", 4,
  "a", 20,
  "a", 14,
  "a", 12,
  "a", 9,
  "b", 66,
  "b", 23,
  "b", 48)
我还尝试了
seq_-along()
,这让我更接近我想要的,但更多的是一个运行的行计数,比如
row_-number()
,每次组有一个值

df %>%
  group_by(group) %>%
  mutate(ID = seq_along(group)) %>%
  as.data.frame()

   group value expectedID ID
1      a     4          1  1
2      a     3          1  2
3      a    10          1  3
4      b     2          1  1
5      b     4          1  2
6      a    20          2  4
7      a    14          2  5
8      a    12          2  6
9      a     9          2  7
10     b    66          2  3
11     b    23          2  4
12     b    48          2  5
我想要的输出

我希望它看起来像这样:

df$expectedID <- c(1,1,1,1,1,2,2,2,2,2,2,2)

# A tibble: 12 x 3
   group value expectedID
   <chr> <dbl>      <dbl>
 1 a         4          1
 2 a         3          1
 3 a        10          1
 4 b         2          1
 5 b         4          1
 6 a        20          2
 7 a        14          2
 8 a        12          2
 9 a         9          2
10 b        66          2
11 b        23          2
12 b        48          2
df$expectedID这里有一个选项,(ab)使用
rle()
data.table::rowid()

df$id%{rep(data.table::rowid(.$values),times=.$length)}
df$expectedID <- c(1,1,1,1,1,2,2,2,2,2,2,2)

# A tibble: 12 x 3
   group value expectedID
   <chr> <dbl>      <dbl>
 1 a         4          1
 2 a         3          1
 3 a        10          1
 4 b         2          1
 5 b         4          1
 6 a        20          2
 7 a        14          2
 8 a        12          2
 9 a         9          2
10 b        66          2
11 b        23          2
12 b        48          2
df$id <- 
  rle(df$group) %>% {rep(data.table::rowid(.$values), times = .$length)}