我正在尝试改变这个
data.frame(id=c(1,1,1,1,1,2,2), val=c('a','a','b','a','a','a','b'))
id val
1 1 a
2 1 a
3 1 b
4 1 a
5 1 a
6 2 a
7 2 b
Run Code Online (Sandbox Code Playgroud)
进入
id val
1 1 1
2 1 1
3 1 2
4 1 3
5 1 3
6 2 1
7 2 2
Run Code Online (Sandbox Code Playgroud)
对于每个id,值val均以1开头,val更改时以1递增。
一种dplyr可能是:
df %>%
group_by(id) %>%
mutate(val = with(rle(as.numeric(val)), rep(seq_along(lengths), lengths)))
id val
<dbl> <int>
1 1 1
2 1 1
3 1 2
4 1 3
5 1 3
6 2 1
7 2 2
Run Code Online (Sandbox Code Playgroud)
使用rleid()from 的相同想法data.table:
df %>%
group_by(id) %>%
mutate(val = rleid(val))
Run Code Online (Sandbox Code Playgroud)