我有一个看起来像这样的矩阵:
set.seed(1234)
m <- matrix(round(runif(50,0,4)), ncol=10)
m <- (m>2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[3,] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[4,] FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
[5,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
对于每一列,我需要计算 TRUE
的数量。如果每列的 TRUE
总数低于 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
我的真实矩阵要大得多(100,000 x 2,000),因此解决方案需要很快。
关于如何到达那里有任何提示吗?
最佳答案
首先,可以使用“colSums”查找列的计数:
colSums(m)
# [1] 1 2 2 1 0 3 0 3 1 2
然后,就像您覆盖 m
一样矩阵与您的 m <- m > 2
,您可以使用条件覆盖选择列:
m[, colSums(m) < 3] <- FALSE
m
# [,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
关于R - 计算矩阵列中 "True"值的数量并分配 "False",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63799421/