4

ベクトルで「ピーク」を見つけようとしています。つまり、同じ値を持たない両側の最も近い隣接要素の値が低い要素です。

だから、例えばベクトルで

c(0,1,1,2,3,3,3,2,3,4,5,6,5,7)

位置 5、6、7、12、および 14 にピークがあります。

極大値と極小値を見つけることは近いですが、完全には一致しません。

4

1 に答える 1

8

これは機能するはずです。の呼び出しdiff(sign(diff(x)) == -2は、本質的に、によって選択された一意の値のそれぞれで、またはその周辺で負の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

(最も近い異なる値の要素の値が低い場合に、要素1と14の両方が一致する可能性があるように、ベクトルにsを埋め込み-Infました。代わりに、の一方または両方を設定することで、要素の終了一致ルールを調整できます。これらをInf。)

于 2012-10-17T23:52:43.667 に答える