2012-10-17 50 views
2

我試圖在矢量中查找「峯值」,即兩側最近的相鄰元素的值不相同的元素具有較低的值。查找向量中的峯值

因此,例如在矢量

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

您給出的鏈接中的答案有什麼問題?即哪個(diff(sign(diff(tt)))== - 2)+1 – blindjesse

+0

它只返回'12',因爲這是**直接**鄰居具有較低值的唯一元素。 – RoyalTS

+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 

(I填充爲-Inf是你的載體中,從而兩個元件1和14具有的被匹配的可能性,應該最接近不同值元素有一個較低的值。可以明顯調整最終元件匹配通過改爲將其中的一個或兩個設置爲Inf)。

+0

...現在只有點擊鏈接的問題才能看到Ben Bolker和Tommy在這裏使用的方法和解釋與我在這裏所做的基本相同!我想這是一個跡象,表明這與你所能做的一樣好。 –

+0

就像我說的:它接近我想要的,但我不知道如何改變它來實現我想要的。感謝您花時間解釋您的解決方案如何工作! – RoyalTS