次のマトリックスを考えて、列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を返すにはどうすればよいですか?
?which.max
をご覧ください
> which.max( matrix[,2] )
[1] 2
?order
を参照してください。最後のインデックス(または最初、降順)が必要なだけなので、これでうまくいくはずです。
order(matrix[,2],decreasing=T)[1]
次はどうですか。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章を参照してください。