2013-07-12 29 views
43

行列の最大要素値とその位置(行列の行IDと列ID)を探したいと思います。行列の最大値の行と列のインデックスを見つける

私は以下の関数を使って行列の行と列を返します。

これは悪いハックのように思えます。これは、おそらくネイティブメソッドが欠けているようなものです。そこにはより良い/ R方法はありますか?

mm <- matrix(rnorm(100), 10, 10) 
maxCords <- matxMax(mm) 
mm[maxCords] 
+0

解決策は同じですが、私は検索しましたが、最大と最小の両方で解決策をとっているケースがあると思います(分を検索するために記憶していました)。また、関数(この場合は冗長であるが)は、ある程度の教育的価値があるかもしれない。 – ricardo

答えて

83

あなたはこれらについて

## Some data 
set.seed(123) 
mm <- matrix(rbinom(40, 20, 0.5), 8, 5) 
mm 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 9 10 8 11 11 
# [2,] 12 10 6 11 12 
# [3,] 9 14 9 10 6 
# [4,] 13 10 14 11 10 
# [5,] 13 11 13 9 12 
# [6,] 6 10 11 8 8 
# [7,] 10 7 11 14 9 
# [8,] 13 13 16 13 8 

which(mm == max(mm), arr.ind = TRUE) 
#  row col 
# [1,] 8 3 
+3

は、2番目の最大値の場所を見つける方法はありますか? 2番目の最大値は最初の最大値と同じにすることができます。その場合、最初の最大値とまったく同じ2番目の最大値の位置を取得したいと考えています。 – user2543622

+3

@ user2543622、セットアップの例で提案されたソリューションを試しましたか?提案された解は、最大値に等しい行列のすべての要素のリストを提供する。だから関係があるなら、あなたはそれらすべてを手に入れるでしょう。 – QuantIbex

0

どのように行うことができ、次のように私が使用

matxMax <- function(mtx) 
{ 
    colmn <- which(mtx == max(mtx)) %/% nrow(mtx) + 1 
    row <- which(mtx == max(mtx)) %% nrow(mtx) 
    return(matrix(c(row, colmn), 1)) 
} 

は次のとおりです。

は、ここに私の機能ですか?

which.min(mm) 
which.max(mm) 
+5

'which.min'は' which.max'では配列インデックスを返しません。どちらも行列をベクトルとして扱い、行インデックスと列インデックスの代わりにベクトルインデックスを返します。 –

関連する問題