通过将相同大小的布尔掩码与R中相同的输出维度重叠来过滤矩阵

通过将相同大小的布尔掩码与R中相同的输出维度重叠来过滤矩阵,r,matrix,filter,mask,R,Matrix,Filter,Mask,给定此5x5邻接矩阵: library(matrixcalc) set.seed(1) matrix(runif(25, 0, 10), nrow=5, ncol=5) %>% upper.triangle 形成该矩阵: [,1] [,2] [,3] [,4] [,5] [1,] 2.655087 8.983897 2.059746 4.976992 9.347052 [2,] 0.000000 9.446753 1.765568 7.17618

给定此5x5邻接矩阵:

library(matrixcalc)
set.seed(1)
matrix(runif(25, 0, 10), nrow=5, ncol=5) %>% upper.triangle
形成该矩阵:

     [,1]     [,2]     [,3]     [,4]     [,5]
[1,] 2.655087 8.983897 2.059746 4.976992 9.347052
[2,] 0.000000 9.446753 1.765568 7.176185 2.121425
[3,] 0.000000 0.000000 6.870228 9.919061 6.516738
[4,] 0.000000 0.000000 0.000000 3.800352 1.255551
[5,] 0.000000 0.000000 0.000000 0.000000 2.672207
我想过滤这个布尔过滤器掩码中所有为真的条目,同时保持大小,用NA或0填充假条目

mask <- matrix(rep(FALSE, 25), nrow=5, ncol=5)
mask[1,2] <- TRUE
mask[2,3] <- TRUE
mask[1,5] <- TRUE 
mask[3,5] <- TRUE
要输出由遮罩过滤的相同大小的矩阵,请执行以下操作:

    [,1]     [,2]     [,3] [,4]     [,5]
[1,]    0 8.983897 0.000000    0 9.347052
[2,]    0 0.000000 1.765568    0 0.000000
[3,]    0 0.000000 0.000000    0 6.516738
[4,]    0 0.000000 0.000000    0 0.000000
[5,]    0 0.000000 0.000000    0 0.000000

如果矩阵名为
mat
,则可以执行以下操作:

mat[!mask] <- 0

mat[!mask]如果您的矩阵被调用
mat
您可以执行以下操作:

mat[!mask] <- 0

mat[!mask]我们可以使用
replace

replace(mat, !mask, 0)

我们可以使用
替换

replace(mat, !mask, 0)