【问题标题】:Merge two matrix by column names and row names按列名和行名合并两个矩阵
【发布时间】:2020-05-09 04:24:45
【问题描述】:

我想根据列名和行名合并两个矩阵。

两个矩阵中的值都是数值,合并就是对一起出现的两个矩阵求平均。

矩阵1:

  A B C 
x 1 4 3
z 5 2 4
k 1 2 3

和矩阵2:

  A B C D
x 6 4 1 2
y 2 3 1 3
z 1 4 1 4 
k 7 5 3 1

所以输出将是:

   A   B   C  D
x 3.5  4   2  2
y  2   3   1  3
z  3   3  2.5 4
k  4  3.5  3  1

我的想法是使用for循环或者apply函数,但是如果矩阵很大,那么这个程序会运行很长时间。有什么建议吗?谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用rownamescolnamesmatrix2 进行子集化并仅更新其中的一部分。

    matrix2[rownames(matrix1), colnames(matrix1)] <- (matrix1 + matrix2[rownames(matrix1), colnames(matrix1)])/2
    
    matrix2
    
    #    A   B   C D
    #x 3.5 4.0 2.0 2
    #y 2.0 3.0 1.0 3
    #z 3.0 3.0 2.5 4
    #k 4.0 3.5 3.0 1
    

    数据

    matrix1 <- structure(c(1L, 5L, 1L, 4L, 2L, 2L, 3L, 4L, 3L), .Dim = c(3L, 
               3L), .Dimnames = list(c("x", "z", "k"), c("A", "B", "C")))
    
    matrix2 <- structure(c(6L, 2L, 1L, 7L, 4L, 3L, 4L, 5L, 1L, 1L, 1L, 3L, 2L, 
    3L, 4L, 1L), .Dim = c(4L, 4L), .Dimnames = list(c("x", "y", "z", 
    "k"), c("A", "B", "C", "D")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2014-08-16
      • 2011-12-29
      • 2015-06-10
      相关资源
      最近更新 更多