在R中生成具有不规则模式的序列

时间:2018-09-19 16:48:56

标签: r

我试图生成一列显示整个字段的持久性。该字段是顺序的和数字的,但通常不会增加。从本质上讲,每个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

1 个答案:

答案 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))