我试图在向量中找到“峰值”,即两侧最近的相邻元素不具有相同值的元素具有较低的值。
所以,例如在向量中
c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)
在 5、6、7、12 和 14 位置有峰值
找到局部最大值和最小值很接近,但不太合适。
我试图在向量中找到“峰值”,即两侧最近的相邻元素不具有相同值的元素具有较低的值。
所以,例如在向量中
c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)
在 5、6、7、12 和 14 位置有峰值
找到局部最大值和最小值很接近,但不太合适。
这应该有效。调用diff(sign(diff(x)) == -2
查找峰值的方法本质上是在rle
.
x <- c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)
r <- rle(x)
which(rep(x = diff(sign(diff(c(-Inf, r$values, -Inf)))) == -2,
times = r$lengths))
# [1] 5 6 7 12 14
(我用 s 填充了您的向量,-Inf
以便元素 1 和 14 都有可能被匹配,如果最近的不同值元素具有较低的值。您显然可以通过设置一个或两个来调整最终元素匹配规则这些到Inf
.)