查找模式中的最后一个数据点

时间:2013-03-29 14:05:53

标签: r time-series

鉴于以下数据集和代码,我可以在模式中找到第一个数据点,但是如何找到模式中的最后一个数据点呢?

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(),但无济于事

1 个答案:

答案 0 :(得分:1)

将函数中的行更改为:

fish[which(x),]

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