我正在尝试对矩阵的所有列应用 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 中做到这一点?
我正在尝试对矩阵的所有列应用 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 中做到这一点?
使用all()
:
apply(x, 2, all)
[1] FALSE TRUE FALSE
您没有要求它,但它any()
是以下内容的补充all()
:
apply(x, 2, any)
[1] TRUE TRUE FALSE
我知道的最快的方法:
colSums(x) == nrow(x)
如果你是打代码的,那就更晦涩难懂了
!colSums(!x)
此外,如果您的数据只有两行,您可以只做矢量化
x[1,] & x[2,]
所有这些都应该比使用循环(for
或*apply
)更快
最后,要将结果放入水平矩阵,请将所有内容包装到t(...)
ormatrix(..., nrow = 1)
中。