如果两个矩阵包含缺失值,如何在 R 中将它们相乘?

r programmingserver side programmingprogramming更新于 2025/4/9 11:52:17

如果我们要将两个包含缺失值的矩阵相乘,那么我们首先需要将缺失值转换为零,然后才能轻松进行乘法运算。如果不这样做,乘法的输出在所有位置都会出现 NA。

查看下面给出的示例,了解如果矩阵中存在 NA,乘法运算的正确性。

示例 1

以下代码片段创建了一个示例 矩阵 −

M1<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M1

创建以下矩阵 −

    [,1] [,2] [,3] [,4] [,5]
[1,]  6   10   NA    6   10
[2,]  6   NA   10   10   10
[3,] NA   10   10    6    6
[4,] 10   10   10    6   NA
[5,] 10    6   10   NA    6

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M1<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M2<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M2

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

    [,1] [,2] [,3] [,4] [,5]
[1,]  7    7    7   NA   3
[2,]  7    7    3   NA   3
[3,]  7    3   NA   NA  NA
[4,] NA    7    7   NA   7
[5,] NA    3    7    3   7

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M1<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M2<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M1[is.na(M1)]<-0
M1

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

    [,1] [,2] [,3] [,4] [,5]
[1,]  6   10   0     6   10
[2,]  6    0  10    10   10
[3,]  0   10  10     6    6
[4,] 10   10  10     6    0
[5,] 10    6  10     0    6

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M1<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M2<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M1[is.na(M1)]<-0
M2[is.na(M2)]<-0
M2

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

   [,1] [,2] [,3] [,4] [,5]
[1,] 7   7     7    0    3
[2,] 7   7     3    0    3
[3,] 7   3     0    0    0
[4,] 0   7     7    0    7
[5,] 0   3     7    3    7

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M1<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M2<-matrix(sample(c(NA,rpois(2,5)),25,replace=TRUE),ncol=5)
M1[is.na(M1)]<-0
M2[is.na(M2)]<-0
M1 %*% M2

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

    [,1] [,2] [,3] [,4] [,5]
[1,] 112 184  184    30 160
[2,] 112 172  182    30 158
[3,] 140 160  114    18 114
[4,] 210 212  142     0 102
[5,] 182 160  130    18  90

示例 2

以下代码片段创建了一个示例矩阵 −

M3<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M3

The following matrix is created −

    [,1]  [,2] [,3] [,4] [,5]
[1,] -0.2 -0.1   NA -0.1 -0.1
[2,]  1.3 -0.1 -0.6   NA  1.3
[3,] -0.1 -0.1  0.4  1.3   NA
[4,]  NA   1.3   NA -0.2 -0.2
[5,]  NA    NA -0.1  0.4 -0.6

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M3<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M4<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M4

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

     [,1] [,2] [,3] [,4] [,5]
[1,] -0.1 -0.1 -0.9  0.7   NA
[2,]  0.7  0.7   NA  0.7 -0.1
[3,]   NA  1.1  0.7   NA -0.9
[4,]  0.7 -0.9   NA  0.7   NA
[5,] -0.7 -0.7  1.1 -0.9 -0.9

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M3<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M4<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M3[is.na(M3)]<-0
M3

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

     [,1] [,2] [,3] [,4] [,5]
[1,] -0.2 -0.1  0.0 -0.1 -0.1
[2,]  1.3 -0.1 -0.6  0.0  1.3
[3,] -0.1 -0.1  0.4  1.3  0.0
[4,]  0.0  1.3  0.0 -0.2 -0.2
[5,]  0.0  0.0 -0.1  0.4 -0.6

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M3<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M4<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M3[is.na(M3)]<-0
M4[is.na(M4)]<-0
M4

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

     [,1]  [,2] [,3] [,4] [,5]
[1,] -0.1 -0.1 -0.9  0.7  0.0
[2,]  0.7  0.7  0.0  0.7 -0.1
[3,]  0.0  1.1  0.7  0.0 -0.9
[4,]  0.7 -0.9  0.0  0.7  0.0
[5,] -0.7 -0.7 1.1  -0.9 -0.9

要将两个矩阵相乘(如果它们包含缺失值),请在上面创建的矩阵上,将以下代码添加到上面的代码片段中 −

M3<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M4<-matrix(sample(c(NA,round(rnorm(5),1)),25,replace=TRUE),ncol=5)
M3[is.na(M3)]<-0
M4[is.na(M4)]<-0
M3 %*% M4

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

      [,1]  [,2]  [,3]  [,4]   [,5]
[1,] -0.05  0.11  0.07 -0.19  0.10
[2,] -1.11 -1.77 -0.16 -0.33 -0.62
[3,]  0.85 -0.79  0.37  0.77 -0.35
[4,]  0.91  1.23 -0.22  0.95  0.05
[5,]  0.70 -0.05 -0.73  0.82  0.63

相关文章