1
       [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    1
[3,]    0    1    0
[4,]    0    0    1
[5,]    1    0    0

上記のような行列が与えられた場合 - 最初の要素が 1 で他のすべての要素が 0 である行を選択して、行列を反復処理する効率的な方法は次のようになります。

       [,1] [,2] [,3]    
[1,]    1    0    0    
[2,]    1    0    0

返されますか?

ありがとう。

4

1 に答える 1

2

データを再作成します。

a <- array(c(1,0,0,0,1,0,1,1,0,0,0,1,0,1,0), dim=c(5,3))

次に、条件に等しいベクトルを作成します。

cond <- c(1, 0, 0)

次に、へapplyの呼び出しでラップされたステートメントは、whichどの行が条件に一致するかを教えてくれます

which(apply(a, 1, function(x)all(x==cond)))
1] 1 5

最後に、この条件を満たす行を抽出するには:

x <- which(apply(a, 1, function(x)all(x==cond)))
a[x, ]


     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    1    0    0

結果の配列には多くの情報が含まれていません。おそらく、条件に一致する行数を知りたいですか?

length(x)
[1] 2

後続の質問に答えるために。配列が大きい場合に条件ベクトルを作成する方法は?

さて、1つの方法は次のとおりです。幅が 100 列の配列があり、長さが 100 のベクトルが必要で、3 番目の要素を 1 にしたいとします。

cond <- rep(0, 100)
cond[3] <- 1
cond
  [1] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
于 2011-07-11T15:05:44.650 に答える