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)

また、データが 2 行しかない場合は、ベクトル化を実行できます。

x[1,] & x[2,]

これらはすべて、ループ (forまたは*apply)を使用するよりもはるかに高速です。


t(...)最後に、結果を水平行列に入れるには、すべてをorでラップしますmatrix(..., nrow = 1)

于 2013-06-04T10:26:13.457 に答える