2012-10-17 2 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

제공된 링크의 답변에 어떤 문제가 있습니까? ie (diff (sign (diff (tt))) == - 2) +1 – blindjesse

+0

** 즉각 ** 이웃들 모두가 더 낮은 값을 갖는 유일한 요소이기 때문에'12 '를 반환합니다. – RoyalTS

+0

멋진 링크와 함께 지금까지 생각이나 연구를 보여준 데 대해 감사합니다. –

답변

7

이렇게하면됩니다. diff(sign(diff(x)) == -2에 대한 호출은 본질적으로 rle에 의해 추출 된 고유 값 각각에서 또는 그 둘레에서 음의 2 차 미분을 테스트함으로써 최고점을 찾습니다. 두 요소 (1) 및 (14)가 일치 될 수있는 가능성을 가지고, 가장 가까운 다른 값 요소는 낮은 값을 가져야한다. 당신은 분명히 최종 요소 매칭을 조정할 수 있도록

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의와 벡터 패딩 규칙 중 하나 또는 둘 모두를 Inf으로 설정하여 규칙을 적용하십시오.)

+0

... 이제는 링크 된 질문을 클릭하면 Ben Bolker와 Tommy가 본질적으로 동일한 접근법과 설명을 사용했음을 알 수 있습니다. 나는 이것이 당신이 할 수있는만큼 좋음을 나타내는 신호입니다. –

+0

내가 말했듯이 : 그것은 내가 원했던 것에 가까웠지만, 내가 원하는 것을 성취하기 위해 그것을 바꿀 방법을 찾아 내지 못했다. 솔루션 작동 방식을 설명하는 시간을내어 주셔서 감사합니다. – RoyalTS