基于ID将行向量与对应列的矩阵相乘

时间:2016-06-05 13:43:26

标签: r matrix

我是R的新手,我设法编写了一个代码,这个代码导致了我的两个矩阵。矩阵A看起来像这样:

   ID1 ID2 ID3 ID4
row1 1   3   2   2       
row2 2   1   3   1          
row3 3   2   1   2          
row4 2   1   2   3  

矩阵B看起来像

   ID1 ID2 ID3 ID3.1 ID4 
row1 1.11 1.23 0.94 0.95

正如您所看到的,矩阵B中有一个额外的列。首先,我需要通过columnID匹配两个矩阵,这样我就可以摆脱矩阵B中的额外列。

我想将两个矩阵相乘,并将每行的乘积相加。我基本上需要帮助与矩阵A和B中的ID匹配。 谢谢

1 个答案:

答案 0 :(得分:3)

OP中描述的矩阵B显然是错误的。它有四个条目,但有五个列名。假设矩阵B

> B
#      ID1  ID2  ID3 ID3.1  ID4
#row1 1.11 1.23 0.94  0.95 0.96

我们可以使用,例如

t(t(A) * B[colnames(B) %in% colnames(A)])

产生

      ID1  ID2  ID3  ID4
row1 1.11 3.69 1.88 1.92
row2 2.22 1.23 2.82 0.96
row3 3.33 2.46 0.94 1.92
row4 2.22 1.23 1.88 2.88

如果我正确理解了这个问题,那么这就是所需的输出。

希望这有帮助。

修改

根据帖子的最新编辑,您希望在每行中执行求和。函数rowSums()是为此而定制的:

m <- t(t(A) * B[colnames(B) %in% colnames(A)])
m <- cbind(m, rsums=rowSums(m))
> m
      ID1  ID2  ID3  ID4 rsums
row1 1.11 3.69 1.88 1.92  8.60
row2 2.22 1.23 2.82 0.96  7.23
row3 3.33 2.46 0.94 1.92  8.65
row4 2.22 1.23 1.88 2.88  8.21

PS:为避免混淆,请在不同的帖子中发布不同的问题,而不是原始帖子的编辑。