2017-09-13 3 views
0

J'ai un cadre de données avec des colonnes numériques qui sont factorisées et j'ai besoin de les convertir en numérique. Voici un exemple:Convertir un facteur en numérique tout en ignorant les valeurs

y <- structure(list(y = structure(c(2L, NA, 3L, 1L, 4L, 2L), .Label = c(" 1,000,000.00 ", " 1,200,000.00 ", " 150,000.00 ", " 200,000.00 "), class = "factor")), .Names = "y", row.names = c(NA, -6L), class = "data.frame") 

la trame de données contient nas et donc quand je tente de convertir les niveaux de facteur de numérique, je reçois tous nas en retour. Voici ce que j'ai essayé.

Et cela renvoie uniquement les NA. Comment puis-je convertir ces niveaux de facteur en numérique tout en gardant le NAS comme na?

+0

Vous allez avoir besoin de se débarrasser de toutes les virgules d'abord, si vous voulez utiliser 'as.numeric', par exemple 'gsub'. – joran

Répondre

1

Vous devez supprimer les virgules

as.numeric(gsub(",", "", levels(y$y)[y$y])) 

[1] 1200000  NA 150000 1000000 200000 1200000 
+0

Donc, le problème n'avait rien à voir avec le nas, juste les virgules ... –

0

Vous voulez seulement garder les numéros, de sorte que vous pouvez supprimer tout le reste avec gsub:

levels(y$y) <- gsub("[^0-9]", "", levels(y$y)) 
levels(y$y) <- as.numeric(levels(y$y)) 
#   y 
# 1 1.2e+08 
# 2 <NA> 
# 3 1.5e+07 
# 4 1e+08 
# 5 2e+07 
# 6 1.2e+08