计算R中逻辑矩阵的列数

Counting the number of columns in logical matrix in R

我在 R 中有一个这样的矩阵:

matrix =
      1     2     3     4    5     6     7    8     9   10
X3  TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
X2  TRUE FALSE  TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
X1 FALSE FALSE  TRUE FALSE TRUE  TRUE FALSE TRUE FALSE TRUE

而且我需要知道有多少列的 3 个值为 TRUE。我正在寻找的解决方案需要足够通用,以便它可以应用于矩阵的任何可能维度。我试过了

length(which(apply(matrix, 2, function(x) x[1] & x[2] & x[3])))

这行得通,但不是通用的。

你能帮帮我吗?

谢谢!

马里亚诺。

我们可以在逻辑矩阵上使用colSums并检查它是否为3,即矩阵的行数。得到它的sum

sum(colSums(m1)==nrow(m1))
#[1] 3

由于OP使用apply,也可以用all

sum(apply(m1, 2, all))
#[1] 3

正如@RHertel 在评论中提到的那样,如果值是数字并且如果 0 对应于 FALSE 而所有其他元素对应于 TRUE,则将其更改为具有 m1!=0!!m1 的逻辑矩阵,然后执行 colSums 和其余如上。

sum(colSums(!!m1) == nrow(m1))

数据

m1 <- structure(c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, 
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, 
TRUE, TRUE), .Dim = c(3L, 10L), .Dimnames = list(c("X3", "X2", 
"X1"), c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10")))