在R中将一个三维数组转换成矩阵

6
我想将一个三维数组转换为矩阵。我希望数组的第三个维度形成矩阵的第一行,并且这个第三个维度应该按行读取(即,第三个维度的第1行,第2行等应该组成矩阵的第一行)。下面给出了一个示例,其中数组的维度为4、3和5,生成的矩阵有5行12列。我已经提供了一个解决方案来实现我的需求,但对于大型数组来说似乎非常繁琐(它首先从数组的元素(按行)创建向量,然后将这些向量连接起来形成矩阵)。有没有更优雅的方法来做到这一点?感谢您提前的任何建议。
dat <- array( rnorm(60), dim=c(4, 3, 5) )   

results <- list(1:5)            
for (i in 1:5) {  
    vec <- c( t(dat[, , i]) )  
    results[[i]] <- vec  
    }

datNew <- rbind( results[[1]], results[[2]], results[[3]], results[[4]], results[[5]] )  

你应该改变表述。你可能指的是数组打印时打印的矩阵中的“第一个元素”。这些矩阵是数组的第三个维度的元素。从你的例子中我看到你只想展平前两个维度。我的下面的答案会给你想要的结果。 - VitoshKa
感谢VitoshKa指出这一点 - 我已经编辑了问题。 - Steve
2个回答

18

使用aperm

X <- aperm(dat,c(3,2,1))
dim(X)<- c(5, 12)

1
一行回答:
t(apply(dat,3,"c"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接