3

我正在尝试对矩阵的所有列应用 AND,但找不到类似的问题:

> array(c(TRUE,FALSE,TRUE,TRUE,FALSE,FALSE),dim=c(2,3))
      [,1] [,2]  [,3]
[1,]  TRUE TRUE FALSE
[2,] FALSE TRUE FALSE

我试图获得

      [,1]  [,2]  [,3]
[1,]  FALSE TRUE FALSE

通过对列进行 AND 操作,我该如何在 R 中做到这一点?

4

2 回答 2

8

使用all()

apply(x, 2, all)
[1] FALSE  TRUE FALSE

您没有要求它,但它any()是以下内容的补充all()

apply(x, 2, any)
[1]  TRUE  TRUE FALSE
于 2013-06-04T10:20:59.237 回答
5

我知道的最快的方法:

colSums(x) == nrow(x)

如果你是打代码的,那就更晦涩难懂了

!colSums(!x)

此外,如果您的数据只有两行,您可以只做矢量化

x[1,] & x[2,]

所有这些都应该比使用循环(for*apply)更快


最后,要将结果放入水平矩阵,请将所有内容包装到t(...)ormatrix(..., nrow = 1)中。

于 2013-06-04T10:26:13.457 回答