假设我有一个矩阵列表(所有列都相同).如何按行('row bind' rbind)追加/组合这些矩阵以获得单个矩阵?
样品:
> matrix(1, nrow=2, ncol=3)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
> matrix(2, nrow=3, ncol=3)
[,1] [,2] [,3]
[1,] 2 2 2
[2,] 2 2 2
[3,] 2 2 2
> m1 <- matrix(1, nrow=2, ncol=3)
> m2 <- matrix(2, nrow=3, ncol=3)
Run Code Online (Sandbox Code Playgroud)
现在我们可以在列表中包含许多矩阵,假设我们只有两个:
l <- list(m1, m2)
Run Code Online (Sandbox Code Playgroud)
我希望实现以下目标:
> rbind(m1, m2)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 2 2 2
[4,] 2 2 2
[5,] 2 2 2
Run Code Online (Sandbox Code Playgroud)
我可以轻松地在2个矩阵上完成它,但我不知道如何使用矩阵列表.
A5C*_*2T1 53
使用 do.call(rbind,...)
> m1 <- matrix(1, nrow=2, ncol=3)
> m2 <- matrix(2, nrow=3, ncol=3)
> l <- list(m1, m2)
> do.call(rbind, l)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 2 2 2
[4,] 2 2 2
[5,] 2 2 2
Run Code Online (Sandbox Code Playgroud)
您可能还对rbind.fill.matrix()"plyr"包中的函数感兴趣,它还允许您使用不同的列绑定矩阵,并NA在必要时填写.
> m1 <- matrix(1, nrow=2, ncol=3)
> m2 <- matrix(2, nrow=3, ncol=4)
> l <- list(m1, m2)
> library(plyr)
> rbind.fill.matrix(l)
1 2 3 4
[1,] 1 1 1 NA
[2,] 1 1 1 NA
[3,] 2 2 2 2
[4,] 2 2 2 2
[5,] 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
另一种选择使用Reduce(...),但我觉得效率低于do.call
m1 <- matrix(1, nrow=2, ncol=3)
m2 <- matrix(2, nrow=3, ncol=3)
l <- list(m1, m2)
Reduce(rbind, l)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 2 2 2
[4,] 2 2 2
[5,] 2 2 2
Run Code Online (Sandbox Code Playgroud)
另外一个选择,如果你有data.frame和没有matrix,是rbindlist从data.table包中使用.在这里我转换为data.frame之前调用它:
rbindlist(lapply(l,as.data.frame))
V1 V2 V3
1: 1 1 1
2: 1 1 1
3: 2 2 2
4: 2 2 2
5: 2 2 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22788 次 |
| 最近记录: |