如何在R中堆叠多个矩阵

3

我有一组矩阵,类似于下面代码所得到的:

a <- matrix(1, ncol=2, nrow=3)
b <- matrix(2, ncol=2, nrow=3)
c <- matrix(3, ncol=2, nrow=3)
d <- list(a, b, c)

我希望将它们堆叠在一个矩阵中,类似于这个:

e <- rbind(d[[1]], d[[2]], d[[3]])

关键在于我事先不知道需要合并多少个矩阵。是否有一种良好的方法编写代码,可以将列表中的所有矩阵堆叠起来?

5个回答

5
一个经典的do.call函数:
     do.call(rbind,d)

使用 data.table 包的另一种选择:

library(data.table)
rbindlist(lapply(d,as.data.frame))

1
后一种方法非常慢。如果你真的想要一个 data.table,先用矩阵进行绑定,然后再转换。 - Frank

3
library(plyr)
ldply(d)
  1 2
1 1 1
2 1 1
3 1 1
4 2 2
5 2 2
6 2 2
7 3 3
8 3 3
9 3 3

2

My favorite...

Reduce(rbind, d)

2

有两种可能的解决方案。第一,使用基本包。

e <- do.call(rbind, d)

将加入矩阵列表。

其次,使用abind包:

library(abind)
e <- abind(d, along=1)

如果您有数据框而不是矩阵,data.table::rbindlist(d)do.call(rbind, d) 更快。

1
到目前为止,所有解决方案的问题在于当矩阵(不是 data.frame - 对于此问题,dplyrdata.table 可以正常工作)的行和列没有相同的顺序时,绑定将堆叠不相关的值。如果您想检查并考虑每个维度中的名称,请查看 narray

enter image description here

(免责声明:本人编写了该软件包)


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