0

以下に説明するように、2列のマトリックスがあります。

TIME     PRICE    
10        45
11        89
13        89
15        12
16        09
17        34
19        89
20        90
23        21
26        09

上記のマトリックスでは、TIME 列を反復処理して 5 秒を追加し、行に一致する対応する PRICE にアクセスする必要があります。例: 10 から始めます。15 (10+5) にアクセスする必要があります。列の数値が連続データであれば、簡単に 15 に到達できたはずですが、そうではありません。そのため、15 秒の時点で、対応する価格を把握する必要があります。これはデータセット全体の最後まで続きます。アクセスする必要がある次の要素は 20 で、対応する価格です。今、私は再び5秒を追加し、それが続きます. 要素が存在しない場合、対応する価格を取得するには、その要素よりもすぐ大きい要素にアクセスする必要があります。

4

3 に答える 3

1

抽出する行がm[1,1]+5, m[1,1]+10, m[1,1]+15etc の場合:

m <- cbind(TIME=c(10,11,13,15,16,17,19,20,23,26), 
           PRICE=c(45,89,89,12,9,34,89,90,21,9))

r <- range(m[,1]) # 10,26
r <- seq(r[1]+5, r[2], 5) # 15,20,25
r <- findInterval(r-1, m[,1])+1 # 4,8,10 (values 15,20,26)
m[r,2] # 12,90,9

findIntervalは、指定された値以下の値のインデックスを見つけるので、より小さい値を指定して、インデックスに 1 を追加します。

于 2012-04-23T04:35:29.433 に答える
0

質問をサブピースに分割します...

値が15の行を取得する:

マトリックスを呼び出して、たとえばDATAを呼び出し、[1]関心のある行を抽出します。

DATA[DATA[,1] == 15, ]

次に、2番目の列を引っ掛けます。

[2]最初の列に5を追加します(これを実行できると確信しています):

DATA[,1] = DATA[,1] + 5

これで始められるはずです。残りは、5ずつ増加し、[1]を使用して毎回必要な価格を取得し、15を変数と交換する、ファンキーな反復のようです。

残りのソリューションは、読者の演習として残しておきます。Rでのループのヒントなどについては、以下のチュートリアルを参照してください(すぐに削除されるとは思いませんが、ローカルコピーを保持することをお勧めします。頑張ってください:))

http://www.stat.berkeley.edu/users/vigre/undergrad/reports/VIGRERintro.pdf

于 2012-04-23T04:17:46.203 に答える
0

@Tommy が上でコメントしたように、正確に取得したい TIME は明確ではありません。私にとっては、シーケンス 10,15,20,25 の PRICE を取得したいようです... true の場合、 mod ( %%) 関数を使用して簡単に実行できます。

TIME <- c(10,11,13,15,16,17,19,20,23,26) # Your times
PRICE <- c(45,89,89,12,9,34,89,90,21,9) # your prices

PRICE[TIME %% 5 == 0] # Get prices from times in sequence 10, 15, 20, ...
于 2012-04-23T08:02:56.017 に答える