Comment trier une matrice par toutes les colonnes
Supposons que j'ai
arr = 2 1 3
1 2 3
1 1 2
Comment puis-je régler ce dans le ci-dessous?
arr = 1 1 2
1 2 3
2 1 3
C'est, d'abord par une colonne, puis par colonne deux etc.
source d'informationauteur Karthick
Vous devez vous connecter pour publier un commentaire.
Ce serait le travail:
Ce qu'elle fait:
sauf qu'il permet à un nombre quelconque de colonnes de la matrice.
La fonction que vous êtes après est
order
(comment je suis arrivé à cette conclusion, ma première pensée fut: "eh bien, tri, que pensezsort
?". Essayésort(arr)
qui ressemble à des sortesarr
comme un vecteur de la place de la ligne sage. En regardant?sort
je vois dans le "Voir Aussi:order
pour le tri ou la réorganisation de plusieurs variables.").Regardant
?order
je vois queorder(x,y,z, ...)
sera de l'ordre parx
la rupture des liens pary
en rupture plus de liens parz
et ainsi de suite. Grand - tout ce que j'ai à faire est de passer dans chaque colonne dearr
àorder
pour ce faire. (Il y a même un exemple dans la section exemples de?order
):Grande!
Mais c'est un peu ennuyeux que j'ai à écrire
arr[,i]
pour chaque colonne dansarr
- ce que si je ne sais pas combien de colonnes qu'il a à l'avance?Bien, les exemples montrent comment vous pouvez le faire aussi: à l'aide de
do.call
. Fondamentalement, vous n':où
args
est un liste des arguments enorder
. Donc, si vous pouvez faire une liste de chaque colonne dearr
ensuite, vous pouvez l'utiliser commeargs
.Une façon de le faire est de convertir
arr
dans un bloc de données, puis dans une liste, ce seront automatiquement mis une colonne par élément de la liste:La
as.list(as.data.frame
est un peu encombrants - il y a certainement d'autres façons de créer une liste, de sorte quelist[[i]]
est lei
ème colonne dearr
mais c'est juste une.J'ai écrit ce petit func qui n'en ordre décroissant ainsi
cols permet de choisir les colonnes à l'ordre et leur ordre
J'ai eu un problème similaire, et la solution semble simple et élégant: