0
votes

Commander un cadre de données basé sur des indices de niveaux de facteur dans R

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


0 commentaires

3 Réponses :


2
votes

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


3 commentaires

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)?



2
votes

Vous pouvez utiliser dplyr comme suit ci-dessous. Ceci est une variante d'une autre réponse, sans utiliser stringr . xxx

Vous pouvez également trier par nom en plus de chaîne . xxx


0 commentaires

0
votes

Vous pouvez utiliser gtools :: mixtionOrder : xxx


En outre, s'il y a d'autres caractères dans string et vous ne sont intéressés que dans des nombres que vous pouvez utiliser parse_number pour extraire le numéro et commander it. xxx


0 commentaires