4

我试图在向量中找到“峰值”,即两侧最近的相邻元素不具有相同值的元素具有较低的值。

所以,例如在向量中

c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)

在 5、6、7、12 和 14 位置有峰值

找到局部最大值和最小值很接近,但不太合适。

4

1 回答 1

8

这应该有效。调用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.)

于 2012-10-17T23:52:43.667 回答