2015-01-26 53 views
1

说最大的id,我们有data.frame“一”发现基于序列间距

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

我希望能够找到最大的“ID”值ID开始之前由“2”提高,而不是' 1' ,并保持所有数据直至并包括‘ID’的,这将是:

#> 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 
+0

你这是什么意思是*最大ID *?他们都不同。看起来像'a [c(1,diff(a $ id))== 1,]'可能会这样做 – 2015-01-26 19:44:14

+0

我的意思是在增量变成2之前的最后一个值 – user1320502 2015-01-26 19:48:48

回答

1

我可能会使用rle()找出的ID之间的差异在第一次运行多久等于一体。例如

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

另一种方法是使用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),]