web-dev-qa-db-ja.com

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

次のマトリックスを考えて、列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を返すにはどうすればよいですか?

117
Jared

?which.maxをご覧ください

> which.max( matrix[,2] )
[1] 2
164
Danko Durbić

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

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

次はどうですか。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章を参照してください。

2
QFanatic