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

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中如何实现?
2个回答

8
使用all()函数:
apply(x, 2, all)
[1] FALSE  TRUE FALSE

虽然您没有要求,但 any()all() 的补集:

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

5
我知道的最快方法是:

colSums(x) == nrow(x)

如果您在进行代码高尔夫比赛,那么还有一个更加隐晦的选择

!colSums(!x)

此外,如果您的数据仅有两行,您可以直接进行向量化处理。
x[1,] & x[2,]

所有这些方法都比使用循环(for*apply)要快得多。


最后,如果想要将结果放入水平矩阵中,请使用t(...)matrix(..., nrow = 1)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接