在R中如何获得一个将在所有列上应用AND的向量?

时间:2013-06-04 10:20:00

标签: r

我正在尝试在矩阵的所有列上应用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?

中执行此操作

2 个答案:

答案 0 :(得分:8)

使用all()

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

您没有要求,但any()all()的补充:

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

答案 1 :(得分:5)

我所知道的最快方式:

colSums(x) == nrow(x)

如果你是打高尔夫球的代码,那就更加模糊了

!colSums(!x)

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

x[1,] & x[2,]

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


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