【发布时间】:2021-02-18 14:09: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)
我尝试过的事情...
我尝试使用cur_group_id(),但这似乎只返回一个识别每个组的二进制值:
df %>%
group_by(group) %>%
mutate(ID = cur_group_id()) %>%
as.data.frame()
# 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
我也尝试过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
基本上,如果滞后组与当前组相同,则保留计数。如果滞后组与当前组不同,则开始新计数。每次组更改时,计数增加一。
【问题讨论】: