web-dev-qa-db-fra.com

Variables numériques converties en facteurs lors de la lecture d'un fichier CSV

J'essaie de lire un fichier .csv créé par Excel dans R où tous les vecteurs (colonnes du fichier CSV) sont numériques. Cependant, ils sont convertis en facteurs à chaque fois que je les importe.

Voici un exemple de mon CSV:

enter image description here

Ceci est mon code:

options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")

Comme vous pouvez le constater, je m’occupe de régler de dec sur "," et le sep sur ";". Cependant, tous les vecteurs qui devraient être numériques sont des facteurs!

Quelqu'un peut-il me donner des conseils? Merci!

16
intael

Vos chaînes NA dans le fichier csv, N/A, sont interprétées comme étant character, puis la colonne entière est convertie en character. Si vous avez stringsAsFactors = TRUE dans options ou dans read.csv (par défaut), la colonne est ensuite convertie en factor. Vous pouvez utiliser l'argument na.strings pour indiquer à read.csv les chaînes à interpréter comme suit: NA.

Un petit exemple:

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";")
str(df)

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)

Mise à jour du commentaire suivant

Bien que cela ne ressorte pas des exemples de données fournis, il existe également un problème avec les instances de '$' concaténées aux nombres, par ex. '3,3 $'. De telles valeurs seront interprétées comme character et le dec = "," ne nous aidera pas. Nous devons remplacer le '$' et le ',' avant que la variable ne soit convertie en numérique.

df <- read.csv(text = "x;y;z
               N/A;1,1;2,2$
               $3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)

df[] <- lapply(df, function(x){
  x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
  x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
  as.numeric(x3)
  }
                         )
df
str(df)
12
Henrik

Vous auriez pu faire fonctionner votre code original en réalité - il existe une petite faute de frappe ("stringsAsFactors", pas "StringsAsFactors"). La commande options ne se plaindra pas du mauvais texte, mais ne fonctionnera tout simplement pas. Lorsque cela est fait correctement, il sera lu comme un caractère, au lieu de facteurs. Vous pouvez ensuite convertir les colonnes dans le format de votre choix.

3
aifille

Je viens d'avoir ce même problème, et essayé tous les correctifs sur ceci et d'autres messages en double. Aucun n'a vraiment bien fonctionné. La façon dont j'ai résolu le problème était en fait du côté d'Excel. Si vous mettez en surbrillance toutes les colonnes de votre fichier source (dans Excel), cliquez avec le bouton droit de la souris sur ==> cellules de format, puis sélectionnez "nombre".

0
Jesse001