【问题标题】:How to add two matrix with different dimensions如何添加两个不同维度的矩阵
【发布时间】:2020-10-27 15:29:33
【问题描述】:

我想添加两个矩阵,但它们的维度不同。我想根据行名和列名添加它们。例如:我有 2 个矩阵 m1 和 m2,

m1<- matrix(rep(1,9),3,3)
row.names(m1)<- c("a", "b", "c")
colnames(m1)<- c("a", "b", "c")

m2<- matrix(rep(1,4),2,2)
row.names(m2)<- c("a", "c")
colnames(m2)<- c("a", "c")
> m1
  a b c
a 1 1 1
b 1 1 1
c 1 1 1
> m2
  a c
a 1 1
c 1 1

我想要这样的输出

  a b c
a 2 1 2
b 1 1 1
c 2 1 2

我找到了一个这样的链接here,但它仅基于列名。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用rownames 和colnames 对m1 进行子集化并进行加法。

    m1[rownames(m2), colnames(m2)] <- m1[rownames(m2), colnames(m2)] + m2
    m1
    #  a b c
    #a 2 1 2
    #b 1 1 1
    #c 2 1 2
    

    如果m1 没有m2 的所有名称:

    i <- intersect(rownames(m1), rownames(m2))
    j <- intersect(colnames(m1), colnames(m2))
    m1[i, j] <- m1[i, j] + m2[i, j]
    

    【讨论】:

    • 非常感谢!!超级简单。
    • 嗨!当我对尺寸分别为 37*37 和 26*26 的实际矩阵进行相同的练习时,我收到错误消息 'Error in m[rownames(m1), colnames(m1)] : subscript out of bounds'。这里 m (37*37) 是我的第一个矩阵,m1(26*26) 是另一个。
    • m 是否包含 所有 rownames 和 colnames 的 m1?
    • 是的,m 包含了 m1 的所有行,问题已经解决,部分行名最后有多余的空格。当我纠正它时,我得到了输出。谢谢!!
    猜你喜欢
    • 2017-07-26
    • 2017-07-02
    • 2013-10-20
    • 2013-08-17
    • 2018-04-28
    • 2012-04-27
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多