我是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匹配。 谢谢
答案 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:为避免混淆,请在不同的帖子中发布不同的问题,而不是原始帖子的编辑。