319 votes

Comment convertir une colonne de structure de données de type numérique ?

Comment convertir une colonne de structure de données d’un type numérique ?

333voto

aL3xa Points 10236

Depuis (encore) personne n'a pu vérifier la marque, je suppose que vous avez une question pratique à l'esprit, surtout parce que vous n'avez pas spécifié de quel type de vecteur vous souhaitez convertir en numeric. Je suggère que vous devriez appliquer transform de la fonction, afin de terminer votre tâche.

Maintenant, je suis sur le point de démontrer certaines "conversion anomalie":

# create dummy data.frame
d <- data.frame(char = letters[1:5], 
                fake_char = as.character(1:5), 
                fac = factor(1:5), 
                char_fac = factor(letters[1:5]), 
                num = 1:5, stringsAsFactors = FALSE)

Laissez-nous jeter un coup d'œil à l' data.frame

> d
  char fake_char fac char_fac num
1    a         1   1        a   1
2    b         2   2        b   2
3    c         3   3        c   3
4    d         4   4        d   4
5    e         5   5        e   5

et courons:

> sapply(d, mode)
       char   fake_char         fac    char_fac         num 
"character" "character"   "numeric"   "numeric"   "numeric" 
> sapply(d, class)
       char   fake_char         fac    char_fac         num 
"character" "character"    "factor"    "factor"   "integer" 

Maintenant vous avez probablement vous demandez-vous "Où une anomalie?" Eh bien, je l'ai croisé tout à fait étrange, les choses dans R, et ce n'est pas la plus de confusion chose, mais il peut vous confondre, surtout si vous lisez ceci avant de rouler dans le lit.

Va ici: les deux premières colonnes sont character. J'ai délibérément appelé 2nd un fake_char. Spot la similitude de ce character variable avec un que Dirk créé dans sa réponse. C'est en fait un numerical vecteur converti character. 3rd et 4ème colonne factor, et le dernier est "purement" numeric.

Si vous utilisez l' transform fonction, vous pouvez convertir l' fake_char en numeric, mais pas l' char variable elle-même.

> transform(d, char = as.numeric(char))
  char fake_char fac char_fac num
1   NA         1   1        a   1
2   NA         2   2        b   2
3   NA         3   3        c   3
4   NA         4   4        d   4
5   NA         5   5        e   5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion

mais si vous faites la même chose sur fake_char et char_fac, vous aurez de la chance, et sortir avec aucun NA:

> transform(d, fake_char = as.numeric(fake_char), 
               char_fac = as.numeric(char_fac))

  char fake_char fac char_fac num
1    a         1   1        1   1
2    b         2   2        2   2
3    c         3   3        3   3
4    d         4   4        4   4
5    e         5   5        5   5

Si vous enregistrez transformé data.frame et vérifiez mode et class, vous obtiendrez:

> D <- transform(d, fake_char = as.numeric(fake_char), 
                    char_fac = as.numeric(char_fac))

> sapply(D, mode)
       char   fake_char         fac    char_fac         num 
"character"   "numeric"   "numeric"   "numeric"   "numeric" 
> sapply(D, class)
       char   fake_char         fac    char_fac         num 
"character"   "numeric"    "factor"   "numeric"   "integer"

Donc, la conclusion est: Oui, vous pouvez convertir character vecteur dans un numeric , mais seulement si c'est des éléments sont des "convertibles" numeric. Si il y a juste un character élément dans le vecteur, vous obtiendrez d'erreur lorsque vous tentez de convertir un vecteur en numerical .

Et, juste pour prouver mon point:

> err <- c(1, "b", 3, 4, "e")
> mode(err)
[1] "character"
> class(err)
[1] "character"
> char <- as.numeric(err)
Warning message:
NAs introduced by coercion 
> char
[1]  1 NA  3  4 NA

Et maintenant, juste pour le plaisir (ou la pratique), d'essayer de deviner le résultat de ces commandes:

> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???

Salutations à Patrick Burns! =)

163voto

Jay Points 884

Quelque chose qui m’a aidé : Si vous avez des bornes de variables à convertir (ou un peu plus), vous pouvez utiliser `` .

Un peu absurde mais juste par exemple :

Dire les colonnes 3, 6-15 et 37 du dataframe vous doivent être convertis en numeric on pourrait :

20voto

Avec le code suivant vous pouvez convertir toutes les colonnes de structure de données numériques :

et pour convertir toute matrice numérique, vous avez deux façons : soit :

ou :

15voto

Dirk Eddelbuettel Points 134700

Tim est correct, et Shane a une omission. Voici quelques exemples supplémentaires :

Notre a maintenant un résumé de la colonne de facteur (chefs) et résumés numériques de la ---qui est faux car il a obtenu les niveaux de facteur numérique---et le résumé (correct) de la `` .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X