【发布时间】:2019-03-29 05:15:15
【问题描述】:
我试图找出一种方法来编写一个循环(或类似应用的函数),该循环从列表中的矩阵中获取特定行,将其写入矩阵/数据帧,从下一个列表元素,并将其放在同一行中的前一个元素之后。
这涉及一个嵌套列表,其中第一部分有五个矩阵,下一部分有五个矩阵,依此类推。每个矩阵块的列数可以不同,最少为 6,最多为 8。总是有四行。下面的示例在第一部分有 4x6 矩阵,在第二部分有 4x8 矩阵。
set.seed(100)
test.df <- data.frame(matrix(1:440,nrow=40,ncol=11))
mat1 <- matrix(rnorm(24),nrow=4,ncol=6)
mat2 <- matrix(rnorm(24),nrow=4,ncol=6)
mat3 <- matrix(rnorm(24),nrow=4,ncol=6)
mat4 <- matrix(rnorm(24),nrow=4,ncol=6)
mat5 <- matrix(rnorm(24),nrow=4,ncol=6)
mat6 <- matrix(rnorm(32),nrow=4,ncol=8)
mat7 <- matrix(rnorm(32),nrow=4,ncol=8)
mat8 <- matrix(rnorm(32),nrow=4,ncol=8)
mat9 <- matrix(rnorm(32),nrow=4,ncol=8)
mat10 <- matrix(rnorm(32),nrow=4,ncol=8)
test.list1 <- list(mat1,mat2,mat3,mat4,mat5)
test.list2 <- list(mat6,mat7,mat8,mat9,mat10)
list.f <- list(test.list1,test.list2)
res.mat <- matrix(nrow=2,ncol=40)
# (Edit) Example of expected results
res.mat[1,1:6] <- mat1[1,]
res.mat[1,9:14] <- mat2[1,]
res.mat[2,1:8] <- mat6[1,]
res.mat[2,9:16] <- mat7[1,]
res.mat
final.res <- cbind(test.df,res.mat)
final.res
嵌套列表的第一个列表中每个矩阵的第一行占据res.mat的第一行。 res.mat 的第一行将有六个条目,跳过两列(离开 NA),然后是接下来的六个条目,依此类推。 res.mat 的第二行将有八个条目,然后是接下来的八个,依此类推。填充 res.mat 后,我会将其附加到 test.df 作为最终结果。 test.df 中填充了一系列数字作为占位符。
我有两个以上更高级别的列表元素,但为了重现性,我只包含了两个。当它处理我的所有数据时,最终数据框中将有 2916 个列表元素和 2916 行。任何关于我如何实现这一点的想法将不胜感激,请询问我是否可以通过代码或描述澄清任何内容。
【问题讨论】:
-
使用此示例输入,您能否提供至少几行预期输出?
-
我添加了一些代码来演示预期的结果。这有助于可视化事物吗?
标签: r list loops matrix data-manipulation