重新编码整数序列

时间:2017-06-23 11:03:53

标签: r dplyr

从包含一列的data.frame对象开始:

 id <- c(1, 1, 1, 2, 3, 3 , 1, 1, 2, 2, 2, 3, 1, 2, 3, 3, 3, 1, 2, 3, 4, 5, 5, 5)

 id <-  as.data.frame(id)

我的输出:每个整数序列以1开头,包含2个或更多单个/重复整数:

id
1   # First sequence on integers            
1               
1               
2               
3               
3               
1  # second  sequence on integers               
1               
2               
2
2               
3               
1   # third sequence on integers                
2               
3               
3               
3               
1   # fourth sequence on integers               
2               
3
4               
5               
5               
5               

预期结果: 我想重新编码我的价值观。

id2
1           
1               
1               
2               
3               
3               
4   
4               
5               
5
5               
6               
7           
8               
9               
9               
9               
10          
11              
12
13          
14              
14              
14

我正在尝试使用group_by r包中的ungroup / dplyr动词。

以下是考虑的方法:

library(dplyr)

id2 <- id %>%
 group_by(id) %>%
 mutate id2 =   %>%   # needing some help !
 ungroup %>%
 select(2)

1 个答案:

答案 0 :(得分:3)

我们可以使用rleid

data.frame(id2 = data.table::rleid(id$id))

rle

中的base R
inverse.rle(within.list(rle(id$id), values <- seq_along(values)))