R-计数“的数量;“真的”;矩阵列中的值,并指定;假;

R-计数“的数量;“真的”;矩阵列中的值,并指定;假;,r,matrix,R,Matrix,我有一个矩阵,看起来像这样: set.seed(1234) m <- matrix(round(runif(50,0,4)), ncol=10) m <- (m>2) 对于每一列,我需要计算TRUEs的数量。如果每列TRUEs的总数小于3, 然后我需要该列中的每个TRUE都变成FALSE 对于本例,预期输出为: [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] FALSE FALSE F

我有一个矩阵,看起来像这样:

set.seed(1234)
m <- matrix(round(runif(50,0,4)), ncol=10)
m <- (m>2)
对于每一列,我需要计算
TRUE
s的数量。如果每列
TRUE
s的总数小于3, 然后我需要该列中的每个
TRUE
都变成
FALSE

对于本例,预期输出为:

      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]
[1,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
我的实矩阵要大得多(100000 x 2000),因此解决方案需要快速


关于如何到达那里有什么提示吗?

首先,可以使用'colSums:

colSums(m)
#  [1] 1 2 2 1 0 3 0 3 1 2
然后,就像用
m2
覆盖
m
矩阵一样,您可以用条件覆盖选择的列:


m[,colSums(m)<3]我们也可以使用
apply

m[, apply(m, 2, sum) < 3] <- FALSE
m[, apply(m, 2, sum) < 3] <- FALSE
library(dplyr)
m %>% 
   as.data.frame %>% 
   mutate(across(everything(), ~ replace(., sum(.) < 3, FALSE)))