63 votes

Convertir le facteur en nombre entier

Je manipule un cadre de données à l'aide du paquet reshape. Lorsque j'utilise la fonction melt, elle factorise ma colonne de valeurs, ce qui pose un problème car un sous-ensemble de ces valeurs sont des entiers sur lesquels je veux pouvoir effectuer des opérations.

Quelqu'un connaît-il un moyen de convertir un facteur en un nombre entier ? Utilisation de as.character() le convertira dans le caractère correct, mais je ne pourrai pas immédiatement effectuer une opération sur lui, et as.integer() o as.numeric() le convertira en un nombre que le système stocke sous ce facteur, ce qui n'est pas utile.

Merci !

Jeff

2 votes

Ceci est similaire à stackoverflow.com/questions/3418128/

75voto

Aaron Points 15093

Je cite directement la page d'aide de factor :

Pour transformer un facteur f en ses valeurs numériques d'origine, as.numeric(levels(f))[f] est recommandé et légèrement plus efficace que as.numeric(as.character(f)) .

1 votes

bazinga. la lecture est fondamentale !

62voto

Gavin Simpson Points 72349

Vous pouvez combiner les deux fonctions : convertir en caractères puis en chiffres :

> fac <- factor(c("1","2","1","2"))
> as.numeric(as.character(fac))
[1] 1 2 1 2

0 votes

J'ai essayé, mais j'obtiens le message d'avertissement : "NAs introduits par coercition". Qu'est-ce que cela signifie ?

0 votes

Ou cela signifie-t-il simplement que certains d'entre eux n'étaient pas des numéros au départ ?

1 votes

@Jeff cela signifie que certains des caractères ne sont pas des nombres, ils sont donc convertis en NA lorsque vous utilisez as.numeric(....) . Regardez levels(fac) y as.numeric(levels(fac)) remplacement de fac avec votre variable de facteur pour voir lesquels sont contraints à NA .

-4voto

La réponse d'Aaron peut entraîner une perte de données, les utilisateurs novices sont priés de ne pas utiliser cette méthode. Essayez plutôt as.numerix(as.character(fac)).

Exemple de perte de données :

  • str(niveaux(Fed_discount_rates$primary))

chr [1:23] "0,50" "0,75" "1,25" "1,75" "2,00" "2,25" "2,50" "2,75" "3,00" "3,25" "3,50" "3,75" "4,00" "4,25" "4,50" "4,75" ...

  • str(as.character(Fed_discount_rates$primary))

chr [1:32] "0,75" "0,50" "1,25" "1,75" "2,25" "2,50" "3,25" "3,50" "4,00" "4,75" "5,00" "5,25" "5,75" "6,25" "6,00" "5,75" ...

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