2017-08-05 91 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