J'ai importé un fichier de test et essayé de créer un histogramme
pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t")
hist <- as.numeric(pichman$WS)
Cependant, je reçois des nombres différents des valeurs de mon jeu de données. A l'origine, je pensais que c'était parce que j'avais du texte, alors j'ai supprimé le texte:
table(pichman$WS)
ws <- pichman$WS[pichman$WS!="Down" & pichman$WS!="NoData"]
Cependant, je reçois toujours des chiffres très élevés. Quelqu'un a-t-il une idée?
Je soupçonne que vous avez un problème avec les facteurs. Par exemple,
_> x = factor(4:8)
> x
[1] 4 5 6 7 8
Levels: 4 5 6 7 8
> as.numeric(x)
[1] 1 2 3 4 5
> as.numeric(as.character(x))
[1] 4 5 6 7 8
_
Certains commentaires:
as.numeric
_ fasse avec ces valeurs?read.csv
_, essayez d’utiliser l’argument _stringsAsFactors=FALSE
_sep="/t
_ et non _sep="\t"
_head(pitchman)
pour vérifier les premières lignes de vos données.pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t")
car je n'ai pas accès au jeu de données.Comme csgillespie a dit. stringsAsFactors est par défaut sur TRUE, ce qui convertit n'importe quel texte en facteur. Ainsi, même après la suppression du texte, vous avez toujours un facteur dans votre cadre de données.
Maintenant, en ce qui concerne la conversion, il existe un moyen plus optimal de le faire. Alors je le mets ici comme référence:
> x <- factor(sample(4:8,10,replace=T))
> x
[1] 6 4 8 6 7 6 8 5 8 4
Levels: 4 5 6 7 8
> as.numeric(levels(x))[x]
[1] 6 4 8 6 7 6 8 5 8 4
Pour montrer que ça marche.
Les timings:
> x <- factor(sample(4:8,500000,replace=T))
> system.time(as.numeric(as.character(x)))
user system elapsed
0.11 0.00 0.11
> system.time(as.numeric(levels(x))[x])
user system elapsed
0 0 0
C'est une grande amélioration, mais pas toujours un goulot d'étranglement. Cela devient toutefois important si vous avez une grande base de données et beaucoup de colonnes à convertir.