我试图在矢量中找到"峰值",即两侧最近的相邻元素不具有相同值的元素具有较低的值.
所以,例如在向量中
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位有峰值
找到局部最大值和最小值接近,但不太合适.
这应该工作.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.)