Rに時系列があります
例えば
[1] 0.2 0.6 0.4 -0.2 -0.1 0.3 0.8 0.7
シリーズの最大の変更点を確認するにはどうすればよいですか? (ポイント 4 から 7 までの最大の変化 = 1) たとえば 1 の変化があったことをどのように確認できますか? (再び 4 (= -0.2) から 7 (= 0,8) へ)
Rに時系列があります
例えば
[1] 0.2 0.6 0.4 -0.2 -0.1 0.3 0.8 0.7
シリーズの最大の変更点を確認するにはどうすればよいですか? (ポイント 4 から 7 までの最大の変化 = 1) たとえば 1 の変化があったことをどのように確認できますか? (再び 4 (= -0.2) から 7 (= 0,8) へ)
一連の点の距離行列を計算するには、dist
関数を使用できます。後は、それらの間の距離が最も大きいポイント ペアを選択するだけです。コード内:
m = as.matrix(dist(runif(10)))
m == max(m)
1 2 3 4 5 6 7 8 9 10
1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
7 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
8 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
9 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
10 FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
which(m == max(m), arr.ind = TRUE)[1,]
row col
10 6
ここで使用できexpand.grid
ます。
exg <- expand.grid(x, x)
exg[apply(exg, 1, diff) == VALUE.TO.FIND, ] # notice the ', ' (comma-and-space)
Var1 Var2
52 -0.2 0.8
VALUE.TO.FIND
検索している特定の値はどこにありますか
代わりに、最大距離を見つけたい場合:
dist <- apply(exg, 1, diff)
exg[dist == max(dist), ]
リスト内の最大の変更を取得するには、それを反復して最大値と最小値を取得します。次に、それらを比較します。O(n)時間です。シンプルな汚れです。
特定の変化を見つけることは、もう少し複雑です。なぜそれが必要なのかはわかりませんが、それでも可能です。1 つの方法は、リストの開始インデックスと終了インデックスのすべての組み合わせで、作成したばかりの最初の関数を呼び出すことです。これは計算が少し複雑ですが、実装する最も簡単な方法です。次に、ポジション 1 から 2 への変更を取得したら、それが希望どおりかどうかを確認し、そうでない場合は 1-3 に変更します。最終的には n-1 から n に到達し、それが探している変更でない場合、それはセットに含まれていません。このメソッドは O(n^2) になります。