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)

これは、パターンが見つかった最初のデータ ポイントを出力します。

 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

指定されたデータに対して。

さまざまな方法で tail() を試しましたが、役に立ちませんでした

4

1 に答える 1

1

関数の行を次のように変更します。

fish[which(x),]

fish[which(x) + length(pat) - 1,]
于 2013-03-29T14:09:41.000 に答える