tidyverse中的分组事件链ID
我正在尝试为我的数据帧创建一个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
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)}