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 回答