鉴于以下数据集和代码,我可以在模式中找到第一个数据点,但是如何找到模式中的最后一个数据点呢?
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(),但无济于事
答案 0 :(得分:1)
将函数中的行更改为:
fish[which(x),]
到
fish[which(x) + length(pat) - 1,]