Étant donné la matrice suivante, supposons que je souhaite trouver la valeur maximale dans la deuxième colonne:
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
Je sais que max(mat[,2])
renverra 8. Comment puis-je renvoyer l'index de ligne, dans ce cas la ligne deux?
Voir ?which.max
> which.max( matrix[,2] )
[1] 2
Voir ?order
. Vous avez juste besoin du dernier index (ou du premier, par ordre décroissant), cela devrait donc faire l'affaire:
order(matrix[,2],decreasing=T)[1]
Que diriez-vous de ce qui suit, où y est le nom de votre matrice et que vous recherchez le maximum dans toute la matrice:
row(y)[y==max(y)]
si vous voulez extraire la ligne:
y[row(y)[y==max(y)],] # this returns unsorted rows.
Pour renvoyer les lignes triées, utilisez:
y[sort(row(y)[y==max(y)]),]
L'avantage de cette approche est que vous pouvez modifier le conditionnel intérieur en tout ce dont vous avez besoin. De plus, en utilisant col(y)
et l'emplacement de la virgule suspendue, vous pouvez également extraire des colonnes.
y[,col(y)[y==max(y)]]
Pour ne trouver que la ligne pour le maximum dans une colonne particulière, dites la colonne 2 que vous pourriez utiliser:
seq(along=y[,2])[y[,2]==max(y[,2])]
là encore, le conditionnel est flexible pour rechercher différentes exigences.
Voir l'excellent chapitre "Introduction au S et S-Plus" de Phil Spector pour d'autres idées.