我试图在矢量中找到“峰值”,即两侧最近的相邻元素不具有相同值的元素具有较低值。
所以,例如在向量中
c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)
在位置5,6,7,12和14处有峰值
Finding local maxima and minima接近,但不太合适。
答案 0 :(得分: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
(我用-Inf
s填充了矢量,以便元素1和14都有可能匹配,如果最近的不同值元素具有较低的值。显然可以调整端元素匹配通过将这些中的一个或两个设置为Inf
来规则。)