7

R で 2 つの行列を乗算しようとしていますが、そのうちの 1 つにはランダムに配置された 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 が得られますが、これは理にかなっていますが、やりたいことを行う方法がわかりません)。私の目的では、Matrix 2 が NA 値を持つことはありません。

4

2 に答える 2

12

の出現箇所をすべてNA0 に変更してから、行列の乗算を行います。

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 に答える