2013-03-29 25 views
1

鑑於以下數據集和代碼,我可以找到模式中的第一個數據點,但是如何才能找到模式中的最後一個數據點?在模式中查找最後一個數據點

d<-read.table(text='Date.Time Aerial 
794 "2012-10-01 08:18:00"  1 
795 "2012-10-01 08:34:00"  1 
796 "2012-10-01 08:39:00"  1 
797 "2012-10-01 08:42:00"  1 
798 "2012-10-01 08:48:00"  1 
799 "2012-10-01 08:54:00"  1 
800 "2012-10-01 08:58:00"  1 
801 "2012-10-01 09:04:00"  1 
802 "2012-10-01 09:05:00"  1 
803 "2012-10-01 09:11:00"  1 
1576 "2012-10-01 09:17:00"  2 
1577 "2012-10-01 09:18:00"  2 
804 "2012-10-01 09:19:00"  1 
805 "2012-10-01 09:20:00"  1 
1580 "2012-10-01 09:21:00"  2 
1581 "2012-10-01 09:23:00"  2 
806 "2012-10-01 09:25:00"  1 
807 "2012-10-01 09:32:00"  1 
808 "2012-10-01 09:37:00"  1 
809 "2012-10-01 09:43:00"  1', header=TRUE, stringsAsFactors=FALSE, row.names=1) 

我能找到一個模式,並確定在該模式的第一個數據點:

require(zoo) 
##Pattern 
pat <- c(1,1,2,2) 
##Find pattern  
count<- function(fish,pat){x <- rollapply(fish$Aerial, length(pat), FUN=function(x)  all(x == pat)) 

         fish[which(x),] 
}     
##call function 
count(d,pat) 

這將打印,該模式被發現的第一個數據點(S):

count(d,pat) 
      Date.Time Aerial 
802 2012-10-01 09:05:00  1 
804 2012-10-01 09:19:00  1 

如何打印模式中的最後一個數據點?

的自適應功能將打印:

 Date.Time Aerial 
802 2012-10-01 09:18:00  2 
804 2012-10-01 09:23:00  2 

給定數據。

我試圖尾巴()以不同的方式,但無濟於事

回答

1

變更功能到該行:

fish[which(x),] 

fish[which(x) + length(pat) - 1,] 
+0

我不得不在此之前,但不-1,]這部分代碼的確切含​​義是什麼?再次感謝! –

+0

@Salmosalar:'which'得到一系列模式開始的指數。但是,如果添加'length(pat)'(在這種情況下爲4),那麼您沒有得到該模式的結束 - 您將在模式的結尾處過一個(嘗試計算模式開始時的四個項目! ) –

+0

我明白了,非常感謝! –

相關問題