在向量中找到峰值

Roy*_*lTS 2 r

我试图在矢量中找到"峰值",即两侧最近的相邻元素不具有相同值的元素具有较低的值.

所以,例如在向量中

c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)
Run Code Online (Sandbox Code Playgroud)

在5,6,7,12和14位有峰值

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

Jos*_*ien 7

这应该工作.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
Run Code Online (Sandbox Code Playgroud)

(我用-Infs 填充你的向量,这样,如果最近的不同值元素具有较低的值,则元素1和14都有可能匹配.显然,你可以通过设置一个或两个来调整end-element匹配规则.这些Inf.)