R中是否有一个函数可以接受向量作为输入并输出具有局部最小值和最大值的向量,并且它们出现在原始向量中?
答案 0 :(得分:0)
让v
是一个纯矢量,并将峰定义为一个元素,该元素严格大于任一侧的元素,并且对于波谷也类似。
1)rollapply (然后滚动),以下给出两个逻辑向量,每个逻辑向量的长度与v相同。一个指示峰的位置,对其他位置使用TRUE和FALSE,另一个指示波谷。如果首选使用which(peaks)
和which(troughs)
来获取索引号。
library(zoo)
peaks <- rollapply(v, 3, function(x) x[2] > max(x[-2]), fill = FALSE)
troughs <- rollapply(v, 3, function(x) x[2] < min(x[-2]), fill = FALSE)
我们可以像这样将它们组合起来,其中每个输出分量如果是峰值,则为1;如果是低谷,则为-1;否则为0。
extreme <- function(x) (x[2] > max(x[-2])) - (x[2] < min(x[-2]))
rollapply(v, 3, extreme, fill = FALSE)
2)基本R 基本R方法为:
prev <- c(NA, v[-length(v)])
post <- c(v[-1], NA)
(v > pmax(prev, post)) - (v < pmin(prev, post))