Recherche…


Syntaxe

  • read.csv (fichier, header = TRUE, sep = ",", quote = "" ", dec =". ", fill = TRUE, comment.char =" ", ...)

  • read.csv2 (fichier, header = TRUE, sep = ";", quote = "" ", dec =", ", fill = TRUE, comment.char =" ", ...)

  • readr :: read_csv (fichier, col_names = TRUE, col_types = NULL, locale = default_locale (), na = c ("", "NA"), comment = "", trim_ws = TRUE, saut = 0, n_max = -1 , progress = interactive ())

  • data.table :: fread (input, sep = "auto", sep2 = "auto", nrows = -1L, header = "auto", na.strings = "NA", stringsAsFactors = FALSE, verbose = getOption ("datatable .verbose "), autostart = 1L, sauter = 0L, sélectionner = NULL, drop = NULL, colClasses = NULL, integer64 = getOption (" datatable.integer64 "), # valeur par défaut:" integer64 "dec = if (sep! =" . ")". "else", ", col.names, check.names = FALSE, encoding =" unknown ", strip.white = TRUE, showProgress = getOption (" datatable.showProgress "), # valeur par défaut: données TRUE. table = getOption ("datatable.fread.datatable") # valeur par défaut: TRUE)

Paramètres

Paramètre Détails
fichier nom du fichier CSV à lire
entête Logique: le fichier .csv contient-il une ligne d'en-tête avec des noms de colonne?
sep caractère: symbole qui sépare les cellules de chaque ligne
citation caractère: symbole utilisé pour citer des chaînes de caractères
déc caractère: symbole utilisé comme séparateur décimal
remplir logical: lorsque TRUE, les lignes de longueur inégale sont remplies de champs vides.
comment.char character: caractère utilisé comme commentaire dans le fichier csv. Les lignes précédées de ce caractère sont ignorées.
... arguments supplémentaires à transmettre à read.table

Remarques

Notez que l'exportation vers un format texte brut sacrifie une grande partie des informations encodées dans les données, telles que les classes de variables, dans un souci de portabilité étendue. Pour les cas qui ne nécessitent pas une telle portabilité, un format tel que .RData ou Feather peut être plus utile.

Les entrées / sorties pour les autres types de fichiers sont traitées dans plusieurs autres rubriques, toutes liées entre les entrées et les sorties .

Importer des fichiers .csv

Importer en utilisant la base R

Les fichiers de valeurs séparées par des virgules (CSV) peuvent être importés à l'aide de read.csv , qui read.table , mais utilise sep = "," pour définir le séparateur comme une virgule.

# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")

# path will vary based on installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"

df <- read.csv(csv_path)

df
##    Var1 Var2
## 1  2.70    A
## 2  3.14    B
## 3 10.00    A
## 4 -7.00    A

Une option conviviale, file.choose , permet de parcourir les répertoires:

df <- read.csv(file.choose())

Remarques

  • Contrairement à read.table , read.csv défaut header = TRUE et utilise la première ligne comme nom de colonne.
  • Toutes ces fonctions convertissent les chaînes en classes de factor par défaut, sauf si as.is = TRUE ou stringsAsFactors = FALSE .
  • La variante read.csv2 défaut sep = ";" et dec = "," à utiliser sur les données de pays où la virgule est utilisée comme point décimal et le point-virgule comme séparateur de champ.

Importer en utilisant des paquets

La fonction readr paquet read_csv offre des performances beaucoup plus rapides, une barre de progression pour les fichiers volumineux et des options par défaut plus répandues que le read.csv standard, y compris stringsAsFactors = FALSE .

library(readr)

df <- read_csv(csv_path)

df
## # A tibble: 4 x 2
##    Var1  Var2
##   <dbl> <chr>
## 1  2.70     A
## 2  3.14     B
## 3 10.00     A
## 4 -7.00     A

Importer avec data.table

Le package data.table introduit la fonction fread . Bien qu'il soit similaire à read.table , fread est généralement plus rapide et plus flexible, devinant automatiquement le délimiteur du fichier.

# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")

# path will vary based on R installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"

dt <- fread(csv_path)

dt
##     Var1 Var2
## 1:  2.70    A
## 2:  3.14    B
## 3: 10.00    A
## 4: -7.00    A

input argument est une chaîne représentant:

  • le nom de fichier ( par exemple "filename.csv" ),
  • une commande shell qui agit sur un fichier ( par exemple "grep 'word' filename" ), ou
  • l'entrée elle-même ( par exemple "input1, input2 \n A, B \n C, D" ).

fread renvoie un objet de classe data.table qui hérite de la classe data.frame , utilisable avec l'utilisation de [] par data.table. Pour retourner un data.frame ordinaire, définissez le paramètre data.table sur FALSE :

df <- fread(csv_path, data.table = FALSE)

class(df)
## [1] "data.frame"

df
##    Var1 Var2
## 1  2.70    A
## 2  3.14    B
## 3 10.00    A
## 4 -7.00    A

Remarques

  • fread n'a pas toutes les mêmes options que read.table . Un argument manquant est na.comment , ce qui peut entraîner des comportements indésirables si le fichier source contient # .
  • fread utilise uniquement " pour le paramètre de quote .
  • fread utilise peu (5) lignes pour deviner les types de variables.

Importer des fichiers .tsv en tant que matrices (basic R)

De nombreuses personnes n'utilisent pas file.path lors de la création d'un chemin vers un fichier. Mais si vous travaillez sur des machines Windows, Mac et Linux, il est généralement recommandé de l'utiliser pour créer des chemins plutôt que des paste .

FilePath <- file.path(AVariableWithFullProjectPath,"SomeSubfolder","SomeFileName.txt.gz")

Data <- as.matrix(read.table(FilePath, header=FALSE, sep ="\t"))

En général, cela est suffisant pour la plupart des gens.

Parfois, les dimensions de la matrice sont si importantes que la procédure d'allocation de la mémoire doit être prise en compte lors de la lecture dans la matrice, ce qui signifie lire la matrice ligne par ligne.

Prenons l'exemple précédent. Dans ce cas, FilePath contient un fichier de dimension 8970 8970 avec 79% des cellules contenant des valeurs non nulles.

system.time(expr=Data<-as.matrix(read.table(file=FilePath,header=FALSE,sep=" ") ))

system.time indique que 267 secondes ont été nécessaires pour lire le fichier.

   user  system elapsed
265.563   1.949 267.563

De même ce fichier peut être lu ligne par ligne,

FilePath <- "SomeFile"
connection<- gzfile(FilePath,open="r")
TableList <- list()
Counter <- 1
system.time(expr= while ( length( Vector<-as.matrix(scan(file=connection, sep=" ", nlines=1, quiet=TRUE)) ) > 0 ) {
    TableList[[Counter]]<-Vector
    Counter<-Counter+1
})
   user  system elapsed
165.976   0.060 165.941
close(connection)
system.time(expr=(Data <- do.call(rbind,TableList)))
   user  system elapsed
  0.477   0.088   0.565

Il y a aussi le paquet futile.matrix qui implémente une méthode read.matrix , le code lui-même se révélera être la même chose que celle décrite dans l'exemple 1.

Exportation de fichiers .csv

Exportation en utilisant la base R

Les données peuvent être écrites dans un fichier CSV en utilisant write.csv() :

write.csv(mtcars, "mtcars.csv")

Les paramètres couramment spécifiés incluent row.names = FALSE et na = "" .


Exportation en utilisant des paquets

readr::write_csv est nettement plus rapide que write.csv et n'écrit pas les noms de lignes.

library(readr)

write_csv(mtcars, "mtcars.csv")

Importer plusieurs fichiers csv

files = list.files(pattern="*.csv")
data_list = lapply(files, read.table, header = TRUE)

Cela lit chaque fichier et l'ajoute à une liste. Par la suite, si tous les data.frame ont la même structure, ils peuvent être combinés en un seul grand data.frame:

df <- do.call(rbind, data_list)

Importer des fichiers à largeur fixe

Les fichiers à largeur fixe sont des fichiers texte dans lesquels les colonnes ne sont séparées par aucun séparateur de caractères, comme , ou ; , mais ont plutôt une longueur de caractère fixe ( largeur ). Les données sont généralement remplies d'espaces blancs.

Un exemple:

Column1 Column2   Column3           Column4Column5 
1647    pi        'important'       3.141596.28318
1731    euler     'quite important' 2.718285.43656
1979    answer    'The Answer.'     42     42

Supposons que cette table de données existe dans le fichier local constants.txt du répertoire de travail.


Importer avec la base R

df <- read.fwf('constants.txt', widths = c(8,10,18,7,8), header = FALSE, skip = 1)

df
#>     V1     V2                 V3         V4        V5
#> 1 1647     pi         'important'   3.14159   6.28318
#> 2 1731  euler   'quite important'   2.71828   5.43656
#> 3 1979 answer       'The Answer.'   42        42.0000

Remarque:

  • Les titres de colonne n'ont pas besoin d'être séparés par un caractère ( Column4Column5 )
  • Le paramètre widths définit la largeur de chaque colonne
  • Les en-têtes non séparés ne sont pas lisibles avec read.fwf()

Importer avec readr

library(readr)

df <- read_fwf('constants.txt', 
               fwf_cols(Year = 8, Name = 10, Importance = 18, Value = 7, Doubled = 8), 
               skip = 1)
df
#> # A tibble: 3 x 5
#>    Year    Name        Importance    Value  Doubled
#>    <int>   <chr>           <chr>     <dbl>    <dbl>
#> 1  1647      pi       'important'  3.14159  6.28318
#> 2  1731   euler 'quite important'  2.71828  5.43656
#> 3  1979  answer     'The Answer.' 42.00000 42.00000

Remarque:

  • Les fonctions helper fwf_* offrent d'autres moyens de spécifier les longueurs de colonnes, y compris la fwf_empty automatique ( fwf_empty )
  • readr est plus rapide que la base r
  • Les titres de colonnes ne peuvent pas être importés automatiquement à partir d'un fichier de données


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow