2010-11-25 54 views
2

假設我有一個這樣的數據幀:使用R鍵從數據幀的列過濾掉非連續的數字

DAYS VALUE 
1  A 
2  A 
3  A 
5  A 
7  A 
9  A 
10  A 
12  A 
13  A 
14  A 
15  A 

我試圖得到一個功能,使得只有一系列連續的數字(3爲最低)仍然如此:

DAYS VALUE 
1  A 
2  A 
3  A 
12  A 
13  A 
14  A 
15  A 

我不知道是否有任何功能的軟件包可以做到這一點?

謝謝!

回答

12

必須有更簡單的方法......但作爲oneliner:

d[(1+(s<-c(0,cumsum(1-(diff(d$DAYS)==1)))))%in%which(table(s)>=3),] 

一步一步

d1 <- c(FALSE, diff(d$DAYS)!=1) 
d2 <- cumsum(d1)+1 
d3 <- table(d2) 
d4 <- which(d3 >= 3) 
d[d2 %in% d4,] 
+0

+1整潔的解決方案 – 2010-11-25 12:13:15

0

一個簡單for環路也將這樣做:

d <- as.integer(DATA$DAYS) 
consec <- rep.int(FALSE, length(d)) 

for(i in 1:(length(d)-2)) 
    if(identical(d[i] + 1:2, d[i + 1:2])){ 
     consec[i + 0:2] <- TRUE 
    } 

DATA[consec, ]