【发布时间】:2014-05-17 14:58:19
【问题描述】:
我想在 R 中通过列名和行名加入矩阵:
m1 = matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
dimnames = list(c("r1", "r2"),
c("a", "b", "c")))
m2 = matrix(c(4, 5, 0, 2,3,4), nrow = 2, ncol = 3, byrow = TRUE,
dimnames = list(c("r2", "r3"),
c("d", "b", "c")))
检查 m1:
> m1
a b c
r1 1 2 3
r2 11 12 13
检查 m2:
> m2
d b c
r2 4 5 0
r3 2 3 4
我想得到如下所示的 m3:
> m3
a b c d
r1 1 2 3 0
r2 11 17 13 4
r3 0 3 4 2
我没有找到一种优雅的方式来做到这一点。使用plyr包中的rbind.fill.matrix函数,可以间接得到m3。
require(plyr)
m3 = rbind.fill.matrix(m1, m2)
rownames(m3) = c(rownames(m1), rownames(m2))
m3[is.na(m3)]=0 # replace na with zero
m3 = t(sapply(by(m3,rownames(m3),colSums),identity)) # aggregate matrix by rownames
我想一定有一些更好的方法可以做到这一点。你有什么建议?
【问题讨论】:
-
你从哪里得到 17 立方米?
-
@RichardScriven 17 来自r2行b列的位置,具体来说17 = m1[2, 2] + m2[1, 2]