2009-04-13 27 views
110

Angesichts der folgenden Matrix enthält, lässt vermuten, ich den maximalen Wert in der zweiten Spalte finden wollen:Finding Zeilenindex mit Maximalwert R

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 

Ich weiß max(mat[,2]) 8. zurück Wie kann ich den Zeilenindex zurückzukehren, in diesem Fall Zeile zwei?

Antwort

26

Siehe ?order. Sie müssen nur den letzten Index (oder ersten, in absteigender Reihenfolge), so sollte dies den Trick:

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

+1 Ich mag diese Antwort, weil es mir ermöglicht, die obersten paar zu betrachten, anstatt nur die max. Ich habe es nützlich gefunden, um die Daten von fast maximalen Werten aus einer anderen Spalte nachzuschlagen. – djhocking

+7

Aber bedenke, dass das langsamer ist als which.max, weil du die ganze Spalte sortieren musst :) – bartektartanus

+0

@bartektanus Und wie denkst du, welches.max gibt das Maximum aus? : p –

156

?which.max

> which.max(matrix[,2]) 
[1] 2 
1

Wie über die folgenden Themen finden, wobei y der Namen Ihrer Matrix und Sie suchen das Maximum in der gesamten Matrix:

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

, wenn Sie die Zeile extrahieren möchten:

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

zurückzukehren sortierten Zeilen verwenden:

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

Der Vorteil dieses Ansatzes besteht darin, dass Sie die bedingte innen etwas zu ändern, die Sie benötigen. Mit col(y) und der Position des hängenden Kommas können Sie auch Spalten extrahieren.

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

Um nur die Zeile für den max in einer bestimmten Spalte, sagt Spalte 2 Sie zu finden verwenden:

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

wieder die bedingten flexibel für unterschiedliche Anforderungen zu suchen.

Sehen Sie Phil Spectors ausgezeichnete "Eine Einführung in S und S-Plus" Kapitel 5 für weitere Ideen.