132 Stimmen

Mit R den Zeilenindex mit dem höchsten Wert finden

Nehmen wir an, ich möchte in der folgenden Matrix den Höchstwert in Spalte zwei finden:

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]) wird 8 zurückgegeben. Wie kann ich den Zeilenindex zurückgeben, in diesem Fall Zeile zwei?

186voto

Danko Durbić Punkte 6847

Véase ?which.max

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

29voto

yoyoyoyosef Punkte 6650

Véase ?order . Sie brauchen nur den letzten Index (oder den ersten, in absteigender Reihenfolge), also sollte dies genügen:

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

3voto

QFanatic Punkte 31

Wie wäre es mit folgendem, wobei y der Name Ihrer Matrix ist und Sie nach dem Maximum in der gesamten Matrix suchen:

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

wenn Sie die Zeile extrahieren möchten:

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

Um sortierte Zeilen zurückzugeben, verwenden Sie:

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

Der Vorteil dieses Ansatzes besteht darin, dass Sie die Bedingung im Inneren nach Belieben ändern können. Auch die Verwendung von 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 Höchstwert in einer bestimmten Spalte zu finden, z. B. Spalte 2, können Sie Folgendes verwenden:

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

Auch hier ist das Konditional flexibel, um unterschiedlichen Anforderungen gerecht zu werden.

Weitere Ideen finden Sie in Phil Spectors ausgezeichnetem Buch "An introduction to S and S-Plus", Kapitel 5.

1voto

rubengavidia0x Punkte 283

Ein anderer Weg mit dplyr:

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

mat %>% as_tibble() %>% filter( V2 == max(V2) )

# A tibble: 1 x 3
     V1    V2    V3
  <int> <int> <int>
1     7     8     9

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X