我试图生成一列显示整个字段的持久性。该字段是顺序的和数字的,但通常不会增加。从本质上讲,每个ID分别增加7(以2结尾)和3(以9结尾)。 ID可能会丢失一个或多个序列,但随后又返回相同的模式。数据如下:
"""SELECT * from orders where OrderNumber = 10100 and status = 'Shipped' order by OrderNumber"""
我想做的就是生成这个:
ID Col
1 0769
1 0772
1 0779
1 0782
1 0799
1 0802
1 0812
2 0769
2 0772
2 0779
3 0782
3 0799
3 0802
3 0812
答案 0 :(得分:2)
如果您只想确定跳转是3还是7,则可以编写一个辅助函数以在发生不同大小的跳转时递增。
jumpchange <- function(x) c(0,cumsum(!diff(x) %in% c(3,7)))+1
然后,您可以使用dplyr最轻松地将其应用于每个组
library(dplyr)
dd %>% group_by(ID) %>%
mutate(persistence = jumpchange(Col))
或者您可以将transform/ave
与基数R一起使用
transform(dd, persistence=ave(Col, ID, FUN=jumpchange))