具有分散NA值的矩阵乘法

时间:2013-05-14 04:23:43

标签: r matrix multiplication na

我希望在R中将两个矩阵相乘,其中一个可能包含随机放置的NA值(即,没有理由将它们全部放在行或列中),但我仍然需要像示例那样的输出下面:

Matrix 1
[1,]      33        45    50
[2,]       NA       NA    54

Matrix 2
[1,] A1               0.0000000        0.0000000
[2,] 0.0000000        A2               0.0000000
[3,] 0.0000000        0.0000000           A3


Result
[1,]      33*A1     45*A2          50*A3
[2,]       NA       NA        (NA*0 +NA*0 +54*A3)=54*A3

简单地做Matrix1%*%Matrix2没有给出我想要的第2行第3列中的元素(它给出NA,这是有道理的,但不知道如何做我想做的事) 。就我的目的而言,矩阵2永远不会有NA值,如果它改变了什么。

2 个答案:

答案 0 :(得分:7)

将所有出现的NA更改为0,然后执行矩阵乘法:

x <- matrix(c(33, 45, 50, NA, NA, 54), nrow=2, byrow=TRUE)
y <- diag(1:3)


x[is.na(x)] <- 0

x %*% y
     [,1] [,2] [,3]
[1,]   33   90  150
[2,]    0    0  162

答案 1 :(得分:0)

要扩展上一个答案及其注释:您可以将输入矩阵的NA模式应用于输出矩阵。

这仅在输入和输出矩阵的维数相同时有效。

render()