R - 计算矩阵列中 "True"值的数量并分配 "False"

标签 r matrix

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

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/

相关文章:

r - 如何在一个图中绘制 'multiple box plots'?

R,我怎样才能用一个简单的矩阵制作热图?

file - 强制 dlmread 返回 uint8 矩阵 - 可能吗?

javascript - checkboxGroupInput 包含每个刻度的选项(多个可能的刻度)

r - 在 R 如何将此 CSV 数据转换为 XTS

r - “=”和“<-”之间有技术区别吗?

c++ - C++ 中的 vector 大小

c++ - C++ 中的 Eigen MatrixXd 推回

javascript - 如何从矩阵SVG中提取位置、旋转和缩放

r - 当分隔字符位于字符串中时,将字符向量拆分为数据帧