J'ai une série de fichiers CSV où les nombres sont formatés dans le style européen en utilisant des virgules au lieu de points décimaux, c'est-à-dire 0,5
au lieu de 0.5
.
Il y a trop de ces fichiers pour les éditer avant de les importer vers R. J'espérais qu'il existe un paramètre simple pour la fonction read.csv()
, ou une méthode à appliquer au jeu de données extrait pour que R traite les données sous forme de nombre un string.
Lorsque vous cochez ?read.table
, vous trouverez probablement toute la réponse dont vous avez besoin.
Il existe deux problèmes avec les fichiers csv européens (continentaux):
c
dans CSV? Ceci est un ,
pour le format standard csv, un ;
pour le format csv européensep
est l'argument correspondant dans read.table
.
pour le format standard csv, un ,
pour le format csv européendec
est l'argument correspondant dans read.table
Pour lire csv standard, utilisez read.csv
, pour lire csv européen, utilisez read.csv2
. Ces deux fonctions sont simplement des wrappers à read.table
qui définissent les arguments appropriés.
Si votre fichier ne suit aucune de ces normes, définissez les arguments manuellement.
De ?read.table
:
dec the character used in the file for decimal points.
Et oui, vous pouvez également l'utiliser pour read.csv
. (pour moi: non stupide, vous ne pouvez pas!)
Alternativement, vous pouvez également utiliser
read.csv2
qui suppose un "," séparateur décimal et un ";" pour les séparateurs de colonnes.
read.csv(... , sep=";")
Supposons que ce champ importé s'appelle "montant", vous pouvez corriger le type de cette façon si vos nombres sont lus sous forme de caractère:
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
Cela m’arrive souvent avec d’autres petits ennuis lors de l’importation à partir d’Excel ou d’Excel. Comme il semble qu’il n’existe aucun moyen cohérent d’obtenir ce que vous attendez lorsque vous importez dans R, les correctifs post-hoc semblent être la meilleure méthode. Par là, je veux dire, regardez ce que vous avez importé - assurez-vous que c'est ce que vous attendiez et corrigez-le s'il ne l'est pas.
Les problèmes peuvent également être résolus si vous indiquez comment vos valeurs manquantes sont représentées (na.strings = ...). Par exemple, V1 et V2 ont ici le même format (décimales séparées par "," dans le fichier csv), mais étant donné que les NA sont présents dans V1, il est interprété comme facteur
dat <- read.csv2("...csv", header=TRUE)
head(dat)
> ID x time V1 V2
> 1 1 0:01:00 0,237 0.621
> 2 1 0:02:00 0,242 0.675
> 3 1 0:03:00 0,232 0.398
dat <- read.csv2("...csv", header=TRUE, na.strings="---")
head(dat)
> ID x time V1 V2
> 1 1 0:01:00 0.237 0.621
> 2 1 0:02:00 0.242 0.675
> 3 1 0:03:00 0.232 0.398
peut être utilisé comme suit:
mydata <- read.table (fileIn, dec = ",")
fichier d'entrée (fileIn):
D:\TEST> plus input2.txt
06-05-2014 09:19:38 3,182534 0
06-05-2014 09:19:51 4,2311 0
peut être
as.is=T
cela empêche également de convertir les colonnes de caractères en facteurs
Juste pour ajouter à la réponse de Brandon ci-dessus, qui a bien fonctionné pour moi (je n'ai pas assez de représentant pour commenter):
Si vous utilisez
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
n'oubliez pas que vous aurez peut-être besoin de sub("[.]", "", d$amount, Perl=T)
pour contourner le caractère .
.