1

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) へ)

4

3 に答える 3

2

一連の点の距離行列を計算するには、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
于 2013-04-23T18:34:42.227 に答える
1

ここで使用でき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),  ]
于 2013-04-23T19:10:07.997 に答える
0

リスト内の最大の変更を取得するには、それを反復して最大値と最小値を取得します。次に、それらを比較します。O(n)時間です。シンプルな汚れです。

特定の変化を見つけることは、もう少し複雑です。なぜそれが必要なのかはわかりませんが、それでも可能です。1 つの方法は、リストの開始インデックスと終了インデックスのすべての組み合わせで、作成したばかりの最初の関数を呼び出すことです。これは計算が少し複雑ですが、実装する最も簡単な方法です。次に、ポジション 1 から 2 への変更を取得したら、それが希望どおりかどうかを確認し、そうでない場合は 1-3 に変更します。最終的には n-1 から n に到達し、それが探している変更でない場合、それはセットに含まれていません。このメソッドは O(n^2) になります。

于 2013-04-23T18:27:48.290 に答える