此问题已在此处有答案:
Create group number for contiguous runs of equal values(5个答案)
17天前关闭
df<-data.frame(old=c(1,1,1,5,7,7,7,11,13,13,16,18,20,20,20,20,25,25,25,29),
new=c(1,1,1,2,3,3,3,4,5,5,6,7,8,8,8,8,9,9,9,10))
old new
1 1 1
2 1 1
3 1 1
4 5 2
5 7 3
6 7 3
7 7 3
8 11 4
9 13 5
10 13 5
11 16 6
12 18 7
13 20 8
14 20 8
15 20 8
16 20 8
17 25 9
18 25 9
19 25 9
20 29 10
如何将old
轻松转换为new
?基本上,它是重复相同次数的值的顺序。价值总是在增加。
先谢了。我都不知道怎么谷歌这么简单的东西。
2条答案
按热度按时间mznpcxlj1#
您可以使用
dplyr::consecutive_id
或data.table::rleid
来获取每次相同值运行的标识符:jdgnovmf2#
您实际上只是检查旧列何时更改。你可以通过多种方式来实现这一点,但最简单的是检查df$old中的前一个值是否与当前值匹配,然后找到其累积和:
或
或
或
或