2012-12-24 11 views
8

Rの行列の各行にある最小または最大の要素のインデックスを取得する方法は?Rの行列の各行の最小または最大の要素のインデックスを取得するR

など。私は行列を持っています:

2 3 1 65 2 
46 7 9 3 2 
9 45 3 5 7 
24 65 87 3 6 
34 76 54 33 6 

私は、各行に2つの最小要素(いずれにしても壊れた結び目)の指標マトリックスを取得したいと思います。結果は、フォーマットを以下にする必要があります:

3 1 
5 4 
3 4 
4 5 
5 4 

私はsortapplyarrayIndwhichなどを使用していくつかのコマンドを試してみました。しかし、まだ望ましい結果を取得できません。 何か助けを歓迎します。

答えて

11
apply(mat, 1, which.max) #.....largest 
apply(mat, 1, which.min) #.....smallest 

t(apply(mat, 1, sort)[ 1:2, ]) # 2 smallest in each row 

t(apply(mat, 1, order)[ 1:2, ]) # indices of 2 smallest in each row 

減少使ってほか= TRUE、あなたは、行で最大の2のためにこれを使用している可能性:

t(apply(mat, 1, order)[ 5:4, ])  
+0

私は値を返していますが、インデックスが必要です。 –

+0

@DWin行のX最大/最小の要素を取得するために、 'order'に' reduce'引数を追加するように編集することを提案しました。 –

+0

ありがとう@BlueMagister –

0

何のkの最大値のインデックスを見つける

    • について各列には

      apply(mat, 1, function(x, k) which(x <= max(sort(x, decreasing = F)[1:k]), arr.ind = T), k)` 
      
    •  [,1] [,2] [,3] [,4] [,5] 
      [1,] 2 1 1 2 2 
      [2,] 4 3 2 3 3 
      

      [[1]] 
      [1] 1 3 5 
      
      [[2]] 
      [1] 4 5 
      
      [[3]] 
      [1] 3 4 
      
      [[4]] 
      [1] 4 5 
      
      [[5]] 
      [1] 4 5 
      
      後者結果前者の結果は、k <- 2ために、あなたの例では、各列におけるkの最小値

      apply(mat, 1, function(x, k) which(x >= min(sort(x, decreasing = T)[1:k]), arr.ind = T), k)` 
      

    のインデックスを見つけます

    applyの2番目のパラメータを1から2に変更して列を検索します。

  • 関連する問題