根据序列间距查找最大ID

时间:2015-01-26 19:42:04

标签: r

说我们有data.frame' a'

set.seed(666)
a <- data.frame( x= rnorm(9), y=letters[1:9] , id=c(1111:1117,1119,1121))

我希望能够找到最大的&#39; id&#39; ids开始增加之前的价值是&#39; 2&#39;而不是&#39; 1&#39;并保留所有数据,包括&#39; id&#39;对于这将是:

#> a
#           x y   id
#1  0.7533110 a 1111
#2  2.0143547 b 1112
#3 -0.3551345 c 1113
#4  2.0281678 d 1114
#5 -2.2168745 e 1115
#6  0.7583962 f 1116
#7 -1.3061853 g 1117

2 个答案:

答案 0 :(得分:1)

我可能会使用rle()来确定ID之间的第一轮差异等于1。例如

stopat <- with(rle(diff(a$id)), if(values[1]==1) lengths[1]+1 else 1)
a[1:stopat, ]

           x y   id
1  0.7533110 a 1111
2  2.0143547 b 1112
3 -0.3551345 c 1113
4  2.0281678 d 1114
5 -2.2168745 e 1115
6  0.7583962 f 1116
7 -1.3061853 g 1117

答案 1 :(得分:1)

另一种方法是使用diffmatch

> a[1:match(2, diff(a$id)),]
#           x y   id
#1  0.7533110 a 1111
#2  2.0143547 b 1112
#3 -0.3551345 c 1113
#4  2.0281678 d 1114
#5 -2.2168745 e 1115
#6  0.7583962 f 1116
#7 -1.3061853 g 1117

如果差异不一定等于2,您可以继续:

a[1:match(TRUE, diff(a$id)>1),]