7

我希望在 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 值,如果这改变了任何东西。

4

2 回答 2

12

将所有出现的 更改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
于 2013-05-14T04:45:30.627 回答
3

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

这仅在输入和输出矩阵具有相同维度时才有效。

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

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

z <- x0 %*% y

z[is.na(x)] <- NA

z
     [,1] [,2] [,3]
[1,]   33   90  150
[2,]   NA   NA  162
于 2018-07-18T11:10:05.853 回答