我有一个数据框,例如这个数据框,其中ID是主要的分组变量,类型代表一种事务类型。类型'a'是输入'b'事务的前兆。我希望能够为每个ID形成的“组”中的所有([a] + [b] {1})模式分配唯一的事务ID。
_unchecked_make_list
结果数据框应该如下所示,尽管tid值在这里是任意的,只需要在整个组中的每个“事务组”中都是一个唯一的ID。
> df <- data.frame(id = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4), type = c('a', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'a', 'a', 'b'))
> df
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 1 b
6 2 a
7 2 b
8 3 a
9 3 b
10 3 a
11 3 b
12 4 a
13 4 a
14 4 a
15 4 b
我写了部分代码,让我'大部分'朝着正确的方向发展,但我不知道如何使用单调增加的值而不是我目前正在分配的二进制值进行变异。
> dfnew <- data.frame(id = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4), type = c('a', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'a', 'a', 'b'), tid = c(100, 100, 100, 200, 200, 100, 100, 100, 100, 200, 200, 100, 100, 100, 200))
> dfnew
id type tid
1 1 a 100
2 1 a 100
3 1 b 100
4 1 a 200
5 1 b 200
6 2 a 100
7 2 b 100
8 3 a 100
9 3 b 100
10 3 a 200
11 3 b 200
12 4 a 100
13 4 a 100
14 4 a 100
15 4 b 100
>
能够使用增量变量进行变异是我需要的。
答案 0 :(得分:4)
你可以尝试
library(dplyr)
df %>% group_by(id) %>%
mutate(tid= sprintf("%03d", head(cumsum(c(F, type=="b")), -1)))