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:
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!
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)
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.
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".