我正在尝试在矩阵的所有列上应用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?
中执行此操作答案 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)
。