杨__羊羊
使用动物园库函数ROLLApply:x <- c(1, 2, 3, 2, 1, 1, 2, 1)library(zoo)
xz <- as.zoo(x)
rollapply(xz, 3, function(x) which.min(x)==2)# 2 3 4 5 6 7 #FALSE FALSE FALSE TRUE FALSE FALSE
rollapply(xz, 3, function(x) which.max(x)==2)# 2 3 4 5 6 7 #FALSE TRUE FALSE FALSE FALSE TRUE然后,使用‘CoreData’对‘wh.max’是一个“中心值”表示局部最大值的值提取索引。显然,对于局部极小值,您也可以使用which.min而不是which.max. rxz <- rollapply(xz, 3, function(x) which.max(x)==2)
index(rxz)[coredata(rxz)]#[1] 3 7我假设你不想要开始值或结束值,但是如果你想要,你可以在处理之前先把矢量的末端垫好,就像端粒在染色体上一样。(我注意到了ppc软件包(用于进行质谱分析的“峰值概率对比”),仅仅是因为在阅读@BenBolker上面的评论之前,我还不知道它的可用性,我认为添加这几个词将增加具有大众兴趣的人在搜索中看到这一点的可能性。)