9
votes

Comment convertir un fichier de données de facteur en numérique?

J'ai une image de données avec toutes les valeurs de facteur xxx

Comment puis-je convertir toutes les valeurs du cadre de données en une nouvelle avec des valeurs numériques (A à 1, B à 2, C à 3, etc ...)

r

0 commentaires

3 Réponses :


11
votes

conversion du facteur code> à numérique code> donne les valeurs entier. Mais, si les colonnes CODE> facteur code> ont des niveaux spécifiés comme c ('B', 'A', 'A', 'C', 'D') CODE> ou C ('C ',' B ',' A ') CODE>, les valeurs entier seront dans cet ordre. Juste pour éviter cela, nous pouvons spécifier les niveaux code> en appelant le facteur code> à nouveau (coeur> (plus sûr) xxx pré>


si nous utilisons data.Table code>, une option serait d'utiliser définir code>. Il serait plus efficace pour les grands ensembles de données. Conversion de Matrix Code> peut poser des problèmes de mémoire. P>

library(data.table)
setDT(df1)
for(j in seq_along(df1)){
 set(df1, i=NULL, j=j, 
     value= as.numeric(factor(df1[[j]], levels= letters[1:3])))
 }


3 commentaires

Je suis curieux: comment est df1 [] <- ... diffère de DF1 <-... Je pense qu'ils conduisent au même résultat à la fin, mais peut-être par des chemins différents?


@atiretoo Il conserve la structure comme dans l'ensemble de données d'origine.


Aha! Merci oui en particulier DF1 sera toujours un cadre de données



12
votes

J'essaierais:

> mydf[] <- as.numeric(factor(as.matrix(mydf)))
> mydf
  V1 V2 V3
1  1  2  3
2  3  2  1
3  3  2  3
4  2  2  1


2 commentaires

Pourriez-vous expliquer pourquoi un simple appliquer (mydf, 2, as.numeric) ne fonctionne pas?


@Albertmasclans, lisez la première ligne de la section "Détails" pour Appliquer . Appliquer est d'abord as.Matrix sur le data.frame (qui convertira tout en caractère s). Si vous utilisez ensuite directement as.numérique sur un fichier de caractères , vous vous retrouverez avec une bande de NA valeurs.



5
votes

Cette approche est similaire à celle d'Ananda, mais utilise Unlist () code> au lieu du facteur (as.matrix ()) code>. Étant donné que toutes vos colonnes sont déjà des facteurs, Unlist () code> les combinera dans un vecteur de facteur avec les niveaux appropriés.

Examinons ce qui se passe lorsque nous nous trouvons lorsque nous Unlist () Code> Votre cadre de données. P>

df <- structure(list(V1 = structure(c(1L, 3L, 3L, 2L), .Label = c("a", 
"b", "c"), class = "factor"), V2 = structure(c(1L, 1L, 1L, 1L
), .Label = "b", class = "factor"), V3 = structure(c(2L, 1L, 
2L, 1L), .Label = c("a", "c"), class = "factor")), .Names = c("V1", 
"V2", "V3"), class = "data.frame", row.names = c(NA, -4L))


0 commentaires