web-dev-qa-db-fra.com

Importé un jeu de données csv dans R mais les valeurs deviennent des facteurs

Je suis très nouveau dans R et j'ai du mal à accéder à un jeu de données que j'ai importé. J'utilise RStudio et j'ai utilisé la fonction Importer un jeu de données lors de l'importation de mon fichier csv et j'ai collé la ligne de la fenêtre de console à la fenêtre source. Le code se présente comme suit:

setwd("c:/kalle/R")
stuckey <- read.csv("C:/kalle/R/stuckey.csv")
point <- stuckey$PTS
time <- stuckey$MP

Cependant, les données ne sont pas des nombres entiers ou numériques comme je suis habitué à mais des facteurs donc quand j'essaye de tracer les variables, je ne reçois que des histogrammes, pas le tracé habituel. Lorsque je vérifie les données, elles semblent être en ordre, mais je ne peux pas les utiliser car elles sont sous forme de facteur. 

56
Joe

La fonction d'importation de données (ici: read.csv()) ainsi qu'une option globale vous proposent de dire stringsAsFactors=FALSE, ce qui devrait résoudre ce problème.

61

Par défaut, read.csv vérifie les premières lignes de vos données pour déterminer s’il faut traiter chaque variable comme numérique. S'il trouve des valeurs non numériques, il suppose que la variable est constituée de données de type caractère et que les variables de type caractère sont converties en facteurs.

Il semble que les variables PTS et MP de votre jeu de données contiennent des valeurs non numériques. C'est pourquoi vous obtenez des résultats inattendus. Vous pouvez forcer ces variables à numérique avec

point <- as.numeric(as.character(point))
time <- as.numeric(as.character(time))

Mais toutes les valeurs qui ne peuvent pas être converties seront manquantes. (Le R FAQ donne une méthode légèrement différente pour la conversion facteur -> numérique mais je ne me souviens jamais de quoi il s'agit.)

25
Hong Ooi

Vous pouvez définir ceci globalement pour toutes les commandes read.csv/read.* avec options(stringsAsFactors=F)

Lisez ensuite le fichier comme suit: my.tab <- read.table( "filename.csv", as.is=T )

20
Sam

Lors de l'importation de fichiers de données csv, la commande d'importation doit refléter à la fois la séparation des données entre chaque colonne (;) et le séparateur de nombres flottants pour vos valeurs numériques (pour la variable numérique = 2,5, il s'agirait de ","). 

La commande pour importer un csv doit donc être un peu plus complète avec plus de commandes:

    stuckey <- read.csv2("C:/kalle/R/stuckey.csv", header=TRUE, sep=";", dec=",")

Cela devrait importer toutes les variables sous forme de nombres entiers ou numériques.

5
Daniel

Je suis aussi nouveau sur R et je suis confronté exactement au même problème. Mais ensuite, j’ai examiné mes données et constaté que cela était dû au fait que mon fichier csv utilisait un séparateur de virgule (,) dans toutes les colonnes numériques (Ex: 1 233 444,56 au lieu de 1233444,56).

J'ai supprimé le séparateur de virgule de mon fichier csv, puis rechargé dans R. Mon cadre de données reconnaît désormais toutes les colonnes sous forme de nombres.

Je suis sûr qu'il existe un moyen de gérer cela dans la fonction read.csv elle-même.

2
Rishal

Cela ne fonctionnait que pour moi lorsque strip.white = TRUE était inclus dans la commande read.csv.

(J'ai trouvé la solution ici .)

1
Helen

pour moi, la solution consistait à inclure skip = 0 (nombre de lignes à ignorer en haut du fichier. Peut être défini sur> 0)

mydata <- read.csv (fichier = "fichier.csv", entête = vrai, sep = ",", skip = 22) 

0
Tymo