Rを使用して最大値を含む行インデックスを見つける


117

次の行列があるとすると、2列目の最大値を見つけたいとしましょう。

mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3)
mat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    7    8    9
[3,]    4    5    6

max(mat[,2])は8を返します。行インデックス(この場合は2行目)を返すにはどうすればよいですか?

回答:



27

を参照してください?order。最後のインデックス(または最初に、降順)が必要なだけなので、これでうまくいくはずです。

order(matrix[,2],decreasing=T)[1]

5
+1この答えが気に入ったのは、最大値だけでなく、上位のいくつかを簡単に確認できるためです。別の列から最大値に近い日付を検索するのに便利です。
djhocking

7
ただし、列全体を並べ替える必要があるため、which.maxよりも遅いことに注意してください:)
bartektartanus

@bartektartanusそして、which.maxがmaxを計算するとどうしますか?:p
Nick Ulle 2014年

10
もちろん、並べ替えなし。最大値を見つけるにはO(n)が必要で、ソートにはもっと時間が必要です:)
bartektartanus 2014年

ランクと順序の間で混乱しました。order各要素のインデックスを返しますが、要素の値でソートされています。リストが最初にソートされた場合、rank各要素が持つインデックスを返します。したがって、order現在のインデックス値を返します。パンダの用語では「インデクサー」として使用されます。
Red Pea、

2

以下はどうですか。ここで、yはマトリックスの名前であり、マトリックス全体の最大値を探しています。

row(y)[y==max(y)]

行を抽出する場合:

y[row(y)[y==max(y)],] # this returns unsorted rows.

ソートされた行を返すには、以下を使用します。

y[sort(row(y)[y==max(y)]),]

このアプローチの利点は、条件付き内部を必要なものに変更できることです。また、col(y)ハンギングコンマの位置と場所を使用して、列を抽出することもできます。

y[,col(y)[y==max(y)]]

特定の列の最大の行のみを検索するには、たとえば列2を使用できます。

seq(along=y[,2])[y[,2]==max(y[,2])]

ここでも、条件は異なる要件を探すために柔軟です。

追加のアイデアについては、Phil Spectorの優れた「SおよびS-Plus入門」の第5章を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.