2017-08-05 8 views
0

Iは、特定の配列に基づいて、[テスト]を埋めるために[X]のデータを使用したい:forループを使用してRで一度に2行ずつ配列を埋める方法は?

x = matrix(rnorm(330),165,2) 


origins = 130:157 

horizon = 8 

col = 1:2 

test = array(0, c(length(origins)*length(col), horizon)) 

for(origin in origins){ 

    for (c in col){ 

    test[which(origin==origins), ] = x[(origin+1):(origin+8), c] 

    } 

} 

しかし、このコードは最初の28で充填する[X]の第2列を抽出するのに役立ちます[テスト]の行次の図は、完全な[テスト]テーブルの一部であり、29行目から56行目までの無効な塗りつぶしを示しています。 enter image description here

完全に記入してもらえる人は誰ですか?どうもありがとうございました。

+0

サードラインが有しますスペルミス(文字iがありません)。 tいくつかのサンプルデータとあなたの結果が好きなものを提供してください。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – epi99

+0

私は添付の画像にある間違った結果をアップロードしました。情報をありがとうございました。 –

答えて

0

ここには解決策がありますが、結果が欲しいものはまだ明確ではありません。はるかに小さなデータを作成し、望ましい結果を表示する方がよい。

割り当ての左側、元のコードで、Cと変化しないので、テストの同じ列Cに対するループを通るたびにoverwrittemなり、

x = matrix(rnorm(330),165,2) 

origins = 130:157 
horizon = 8 
col = 1:2 

test = array(0, c(length(origins)*length(col), horizon)) 

for(origin in origins){ 

    for (c in col){ 

    # the left hand side must vary somehow with c as well. 
    test[(which(origin==origins)-1) + (c - 1) * length(origins) + 1, ] = x[(origin+1):(origin+8), c] 

    } 

} 
+0

ありがとうございました。それはほとんど私を助けます。あなたのコードの結果は、[x]の第1列の観測値131-138が[test]の第1行に満たされ、[x]の第2列の観測値131-138が第2列[テスト]の行、次に連続します。 –

+0

あなたが達成するのに役立ちます:[x]の第1列の観測131-138が[test]の第1行に満たされ、[x]の第1列の観測132-138が記入されます[test]の2行目、...、28ループ後、[test]の29行目に[x]の2列目の観測値131-138が、2列目の観測値132-139 [x]が[テスト]の30行目に記入されています...、続けて –

+0

あなたの記述に基づいて私には正しいようです。しかし、テストデータとして 'x = matrix(c(seq(1.1,165.1,1)、seq(1.2,165.2,1))、165,2)'を使ってみてください。そうでない場合は、テストデータをはるかに小さく(ほんの数行)作成し、目的の出力を表示します(例を示します)。期待される結果を見せれば、より良い回答が得られます! – epi99

関連する問題