Trovare l'indice di riga contenente il valore massimo utilizzando R


117

Data la seguente matrice, supponiamo di voler trovare il valore massimo nella colonna due:

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

So max(mat[,2])che restituirà 8. Come posso restituire l'indice di riga, in questo caso la riga due?

Risposte:



27

Vedi ?order. Hai solo bisogno dell'ultimo indice (o del primo, in ordine decrescente), quindi questo dovrebbe fare il trucco:

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

5
+1 Mi piace questa risposta perché mi permette di guardare facilmente i primi pochi, piuttosto che solo il massimo. L'ho trovato utile per cercare le date dei valori quasi massimi da un'altra colonna.
djhocking

7
Ma tieni presente che questo è più lento di quello. Max, perché devi ordinare l'intera colonna :)
bartektartanus

@bartektartanus E come pensi che.max calcoli il massimo? : p
Nick Ulle

10
Senza smistamento, ovviamente. Scoprendo le esigenze
massime

Mi sono confuso tra grado e ordine. orderrestituisce l'indice di ogni elemento, ma ordinato in base al valore degli elementi. rankrestituisce l'indice che avrebbe ogni elemento , se l'elenco fosse ordinato per primo. orderRestituisce quindi i valori di indice correnti; ed essere usato come un "indicizzatore" in termini di panda.
The Red Pea

2

Che ne dici di quanto segue, dove y è il nome della tua matrice e stai cercando il massimo nell'intera matrice:

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

se vuoi estrarre la riga:

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

Per restituire righe ordinate utilizzare:

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

Il vantaggio di questo approccio è che puoi modificare il condizionale all'interno in qualsiasi cosa ti serva. Inoltre, utilizzando col(y)e la posizione della virgola sospesa è anche possibile estrarre colonne.

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

Per trovare solo la riga per il massimo in una particolare colonna, ad esempio la colonna 2 potresti usare:

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

ancora una volta il condizionale è flessibile per cercare requisiti diversi.

Vedere l'eccellente capitolo 5 di Phil Spector "Un'introduzione a S e S-Plus" per ulteriori idee.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.