gpt4 book ai didi

r - 通过 R 中的 colnames 和 rownames 连接矩阵

转载 作者:行者123 更新时间:2023-12-04 12:20:02 25 4
gpt4 key购买 nike

我想在 R 中通过 colnames 和 rownames 连接矩阵:

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

我想肯定有一些更好的方法可以做到这一点。你有什么建议?

最佳答案

以下似乎有效:

tmp = rbind(as.data.frame(as.table(m1)), as.data.frame(as.table(m2)))
#tmp = aggregate(Freq ~ Var1 + Var2, tmp, sum) #unnecessary
xtabs(Freq ~ Var1 + Var2, tmp)
# Var2
#Var1 a b c d
# r1 1 2 3 0
# r2 11 17 13 4
# r3 0 3 4 2

编辑:正如@AnandaMahto 所指出的,xtabs 是一个“列联表”而不是一个“ reshape 数据”函数,因此它默认求和。

关于r - 通过 R 中的 colnames 和 rownames 连接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com