J'ai un fichier de données dans Lorsque j'ai examiné le Dataframe, ce type de données de cette variable est répertorié comme un facteur et j'en ai besoin dans un format numérique (pas sûr de quel type si - entier - entier - numérique, umm ...?). J'ai donc essayé de le convertir à l'un de ces deux formats, mais j'ai vu un comportement intéressant. P> Dataframe initial: P> r code> que j'ai chargé à partir d'un fichier CSV. L'une des variables s'appelle "montant" et est censée contenir des nombres positifs et négatifs. df2 <- data.frame(df$Amount, as.numeric(df$Amount), as.integer(df$Amount))
str(df2)
'data.frame': 2620276 obs. of 3 variables:
$ df.Amount : Factor w/ 11837 levels "","-1","-10",..: 2 2 1664 4 6290 6290 6290 6290 6290 6290 ...
$ as.numeric.df.Amount.: num 2 2 1664 4 6290 ...
$ as.integer.df.Amount.: int 2 2 1664 4 6290 6290 6290 6290 6290 6290 ...
> head(df2, 20)
df.Amount as.numeric.df.Amount. as.integer.df.Amount.
1 -1 2 2
2 -1 2 2
3 -201 1664 1664
4 -100 4 4
5 1 6290 6290
6 1 6290 6290
7 1 6290 6290
8 1 6290 6290
9 1 6290 6290
10 1 6290 6290
11 1 6290 6290
12 1 6290 6290
13 1 6290 6290
14 1 6290 6290
15 1 6290 6290
16 1 6290 6290
17 1 6290 6290
18 2 7520 7520
19 2 7520 7520
20 2 7520 7520
4 Réponses :
La racine du problème est probablement une valeur funky dans votre CSV importé. S'il venait d'Excel, ce n'est pas rare. Il peut s'agir d'un symbole pour cent, d'un personnage "commentaire" d'Excel ou de toute une longue liste de choses. Je regarderais le CSV dans votre éditeur de votre choix et voyez ce que vous pouvez voir.
Mis à part cela, vous avez quelques options. p>
Un facteur est stocké en tant que niveaux entier qui correspondent aux valeurs. Lorsque vous convertissez directement avec Sinon, regardez en particulier, comme.numérique appliqué à un facteur n'a pas de sens, et peut se produire par une coercition implicite. Transformer un facteur Cependant, je soupçonne que ce sera une erreur parce que l'entrée a quelque chose en outre un nombre. p> p> read.csv code> prend un argument facultatif StringsasFactors code> que vous pouvez définir sur FALSE CODE> P> as.numérique code>, vous enfermez avec ces niveaux d'entiers plutôt que les valeurs initiales: p> ? facteur code>: p>
f code> à approximativement sa
valeurs numériques originales, as.numérique (niveaux (f)) [f] code> est recommandé
et légèrement plus efficace que as.numeric (as.character (f)) code>. p>
blockQuote>
Une fois que la colonne en question est un caractère plutôt que sur facteur, j'ai pu trouver la source de ce type de problème assez rapidement en utilisant grep code> ou GREPL code> pour vérifier certains des suspects probables.
+1 bonne réponse. J'ai élargi un peu dans ma réponse sur la façon de trouver les valeurs incriminées ...
@justin est correct. Voici une promenade sur la façon de trouver les valeurs incriminées: Notez que si votre jeu de données a des valeurs manquantes codées comme une autre cellule vide ou la chaîne "na", vous avez Pour spécifier cela à lire.Table: P> # Here "N/A" is used instead of "NA"...
read.table(text="A B\n1 2\n3 N/A\n", header=TRUE, na.strings="N/A")
Je suis nouveau ici mais j'ai utilisé ce forum pour mes questions. J'avais un problème similaire mais le ci-dessous a travaillé pour moi. Je dépose des données de fichiers TXT au cadre de données notez que j'ai utilisé aussi.is sur la colonne 6 qui disposait de données numériques ainsi que des ordures dans certaines lignes. Utiliser AS.IS Ports Les données sous forme de caractères de la colonne 6. Ensuite, les caractères suivants ont modifié les caractères de la colonne 6 en valeurs numériques. Toutes les valeurs des ordures ont été converties en Na qui pourraient être retirées plus tard. p> espère que cela aide p> p>
Il suffit de convertir les valeurs de facteur en premier, puis convertissez-la en numérique. Cela devrait résoudre votre problème.
as.numeric(as.character(df$Amount))