2015-01-26 56 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),]