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)))