2

このマトリックス(データに名前を付けた)がある場合:

     [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]
[1,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[2,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[5,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[8,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

そして、次のように列を1つの列に結合したいと思います:(行の1つのTRUEはTRUEに等しい)

      [,1]   
 [1,] TRUE 
 [2,] TRUE 
 [3,] FALSE 
 [4,] TRUE   
 [5,] TRUE 
 [6,] FALSE  
 [7,] TRUE   
 [8,] TRUE  
 [9,] FALSE  

私は(|を使用して)次のようなことができることを知っています:

  data2[1:9,1]<-data[,1]|data[,2]|data[,3]|data[,4]…

data2には、異なる列が組み合わされた単一の列が含まれます。しかし、列がたくさんある場合(たとえば、ncol = 100)、これは良い方法ではありません。

私はそれを行うためのいくつかの簡単な方法があると思いますか?

ありがとう

4

2 に答える 2

9

R が論理値と数値の間で変換する方法を利用する別の回答を次に示します。

論理値から数値に移行すると、becksFALSE0gets TRUEso1から行ごとrowSumsの数が得られます。TRUE

rowSums(data)
# [1] 3 3 0 3 3 0 3 3 0

数値から論理に移行すると、 に0なりFALSE、それ以外はすべてになるため、 toTRUEの出力をフィードすると、行に少なくとも 1 つの があるかどうかが示されます。rowSumsas.logicalTRUE

as.logical(rowSums(data))
# [1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE

私はタイラーの答えが好きですが、(証明するために)効率が悪いかもしれませんが、より直感的だと思います。

于 2012-08-05T17:15:08.153 に答える
5

any次のように使用できますapply

mat <- matrix(sample(c(TRUE, FALSE), 100,TRUE), 10)
apply(mat, 1, any)
于 2012-08-05T17:00:17.477 に答える