样本数据包含一些算术序列c(4,5,6)和c(10,11)。统计数字序列的长度
df <- data.frame(x = c(2, 4, 5, 6, 8, 10, 11))
我想这是一个新的列数的每个序列的长度,如
> df
x cnt
1 2 1
2 4 1
3 5 2
4 6 3
5 8 1
6 10 1
7 11 2
这将是简单的先分配df$cnt[1] = 1
,然后第二行及以后只增加计数,或重置为1
,具体取决于df $ x中的连续数字是否符合某些条件(此处为x[i] - x[i-1] == 1
)。我只是不确定循环是在R
去的方式 - 我也需要处理群体。
我可以创建新列以检查它是否在序列中。从那里,我可能可以使用rle
来计算运行长度并生成cnt
列(不知道如何使用NA
来完成)。
> df %>% mutate(check=(x-lag(x)==1))
x check
1 2 NA
2 4 FALSE
3 5 TRUE
4 6 TRUE
5 8 FALSE
6 10 FALSE
7 11 TRUE
这是要走的路吗?请用dplyr
或data.table
建议解决方案?
密切相关的另一种选择 - [RLE般的功能捕获相邻整数的运行](http://stackoverflow.com/q/8466807/903061) – Gregor