2017-08-05 33 views
0

我想使用的[X]以填補數據[測試]基於某些序列:如何使用for循環在R中一次按兩行填充數組?

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] 

    } 

} 

但是,此代碼不僅有助於提取的第二列[X],以填補在第28 [測試]行。下面的圖片是唯一一個完整的[測試]表的一部分,顯示了從行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]的第一列中的觀察值131-138填充在[test]的第一列中,[x]的第一列中的觀察值132-138填入[test]的第2行,...,28個循環後,[x]的第2列中的觀察值131-138填充在[test]的第29列中,第2列中的觀測值132-139填充[x]依次填入[test],...的第30行, –

+0

根據你的描述,這似乎是正確的。但嘗試使用'x = matrix(c(seq(1.1,165.1,1),seq(1.2,165.2,1)),165,2)'作爲測試數據。如果不使測試數據變得更小(只有幾行)並顯示(給出示例)所需的輸出。如果您展示預期結果,您將得到更好的答案! – epi99