J'ai un cadre de données comme suit:
Name string value BB a8 0.6932831 DD a8 -0.3358695 BB a11 0.5912728 AA a11 1.0441365 DD a45 -0.2892612 CC a45 0.5598616 AA a120 0.5885065 AA a120 -0.5287264 DD a140 -0.5091612
3 Réponses :
Vous pouvez éteindre les non-chiffres et organiser ainsi:
library(stringr) library(dplyr) df %>% arrange(as.numeric(str_remove(string, "\\D+"))) Name string value 4 BB a8 1.74351093 8 DD a8 0.41802240 1 BB a11 0.61559079 6 AA a11 0.63900177 5 DD a45 -1.87046411 9 CC a45 -0.44398027 2 AA a120 -0.84459958 3 AA a120 0.01800482 7 DD a140 -0.88140002
Oui cela fonctionne si la première lettre est "A". Mais dans mes vraies données, j'ai des lettres différentes et je voudrais ignorer la lettre, puis commander les données uniquement sur la base de la partie numérique. Avez-vous une idée?
Pouvez-vous essayer ce cadre de données. df <- data.frame (nom = C ("BB", "AA", "AA", "BB", "DD", "AA", "DD", "DD", "CC"), String = C ("A11", "B120", "C120", "A8", "A45", "A14", "A8", "A8", "A45"), Valeur = RNorm (9, moyenne = 0, 1 )))
Y a-t-il une commande de priorité pour les lettres (I.e. A120, B120, C120)?
Vous pouvez utiliser Vous pouvez également trier par dplyr code> comme suit ci-dessous. Ceci est une variante d'une autre réponse, sans utiliser
stringr code>.
nom code> en plus de
chaîne code>. p>
Vous pouvez utiliser En outre, s'il y a d'autres caractères dans gtools :: mixtionOrder code>:
string code> et vous ne sont intéressés que dans des nombres que vous pouvez utiliser
parse_number code> pour extraire le numéro et
commander code> it. p>