C'est de la data et mon expeRtise afin d'en tirer le maximum

Comment importer plusieurs fichiers de données ?

Importer plusieurs fichiers facielement

Dans un précédent article, je vous ai montré comment couper un data frame en plusieurs sous-jeux de données,  et comment, ensuite, les exporter en fichiers csv, ou en plusieurs feuilles d’un classeur Excel, de manière automatisée.

Dans ce tutoriel, nous allons nous intéresser à l’opération inverse, c’est-à-dire à l‘importation automatisée de plusieurs fichiers csv, ou  plusieurs feuilles Excel, et  en les combinant (par les lignes) si besoin.

Table des matières

Importer plusieurs fichiers csv sans les assembler

Pour illustrer cet exemple, j’ai placé 10 fichiers csv  dans un dossier nommé data (placé à la racine de mon projet R).

importer plusieurs fichiers csv en une seule fois

Pour importer tous ces fichiers csv en une fois, le principe est de :

  • récupérer le nom des fichiers grâce à la fonction list.files()
  • créer un vecteur avec le nom des fichiers sans l’extension .csv, grâce à la fonction str_remove() du package stringr
  • employer une boucle for() qui permet, pour chaque fichier,
    • d’importer les données dans un objet nommé x, en utilisant la fonction read.csv2()
    • de renommer l’élément x avec le nom du fichier, grâce à la fonction assign()
    • de supprimer l’objet x, car il contient les data du derniers fichier csv.
files_list <- list.files(here::here("data"),pattern = "*.csv")

library(stringr)
data_names <- str_remove(files_list, ".csv")

for(i in 1: length(files_list)) { 
  x <- read.csv2(here::here("data",files_list[i]))
  assign(data_names[i], x)
    }
rm(x)# supprime le dernier fichier stocké dans x 
Data frames obtenus après l'importation multiple

Importer plusieurs fichiers csv et les assembler

Lorsque les différents jeux de données comportent les mêmes variables, vous pourriez avoir besoin de les importer et de les assembler dans un seul et même data frame.

Pour illustrer cet exemple, j’ai placé les 16 fichiers csv correspondant aux 16 parcours du jeu de données Mario (plus d’infos sur ces données dans l‘article sur les exportations multiples), dans un dossier data2 (toujours placé à la racine de mon projet R).

multiples fichiers csv à importer et à combiner

Voici, par exemple, les premières lignes des deux premiers fichiers:

Détail fichier1
Détail fichier 2

Voici les commandes qui permettent d’importer les différents fichiers et les combiner ensemble (en ajoutant les lignes des différents fichiers les une sous les autres), de manière itérative .

Le principe est de :

  1. récupérer la liste des fichiers csv à importer grâce à la fonction list.files()
  2. pour chaque fichier :
    • récupérer le nom du fichier par la fonction set_names()
    • importer les données en ajoutant une variable “file_name” qui contiendra le nom du fichier (qui provient de la fonction set_names()), et en les plaçant sous les données précédentes (à partir du second fichier importé)

3. corriger le nom du fichier en supprimant le nom du dossier,  et l’extension .csv

library(dplyr)
library(purrr)
mario_data <- list.files(path = "data2", full.names = TRUE) %>%
    set_names() %>%
    map_dfr(~ read.csv2(.x),.id="file_name") %>% 
    mutate(file_name=str_remove(file_name, "data2/")) %>% 
    mutate(file_name=str_remove(file_name, ".csv"))   
str(mario_data)
## 'data.frame':    2334 obs. of  9 variables:
##  $ file_name      : chr  "Banshee Boardwalk" "Banshee Boardwalk" "Banshee Boardwalk" "Banshee Boardwalk" ...
##  $ type           : chr  "Three Lap" "Three Lap" "Three Lap" "Three Lap" ...
##  $ shortcut       : chr  "No" "No" "No" "No" ...
##  $ player         : chr  "Gregg G" "JWhalls" "David B" "Zwartjes" ...
##  $ system_played  : chr  "NTSC" "NTSC" "NTSC" "PAL" ...
##  $ date           : chr  "1997-03-10" "1997-05-27" "1997-08-14" "1997-12-14" ...
##  $ time_period    : chr  "2M 15.94S" "2M 11.37S" "2M 9.81S" "2M 9.58S" ...
##  $ time           : num  136 131 130 130 129 ...
##  $ record_duration: int  78 79 122 16 2 81 202 66 60 1 ... 

Importer plusieurs feuilles Excel dans des data frame distincts

Pour illustrer cette partie, j’ai placé dans un dossier “data3” à la racine du projet R, un classeur Excel qui contient 16 feuilles (il s’agit des données des 16 parcours).

Classeurs excel à importer

La fonction import_list() du package rio permet d’importer, en une fois, toutes les feuilles dans des data frames, et de les stocker ensemble dans une liste (1 data frame par élément de la liste).

library(rio)
data_list <- import_list("data3/mario_kart.xlsx") 
dataframes contenus dans une liste

Dans un second, temps, avec une boucle for() et une fonction assign() nous pouvons sortir les data frame de la liste pour les stocker dans des objets individuels, avec un nom identique au nom du fichier.

for(i in 1: length(data_list)) { 
    assign(names(data_list)[i], data_list[[i]])
    } 
multiples data frame sortis de la liste

Importer plusieurs feuilles Excel et les combiner dans un seul tableau

Si vous désirez combiner ensemble les données des différentes feuilles Excel, vous pouvez le faire très facilement avec les commandes suivantes :

path <- "data3/mario_kart.xlsx"

library(readxl)
mario_data <- path %>%
  excel_sheets() %>% 
    map_df(read_excel,
           path = path) 
data frame combiné

Conclusion

J’espère que ces petits bouts de code vous rendront de grands services !

Dans tous les cas, je pense que cela peut être utile de les conserver  à portée de main, parce que cette problématique de l’importation multiple de fichiers est relativement fréquente lorsqu’on analyse des données.

Et comme d’habitude, si cet article vous a plus, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 

Retrouvez d'autres articles qui pourraient vous intéresser

3 réponses

    1. Bonjour,

      je ne connais pas le format ncdf. Si vous parlvez de netcdf (que je ne connais pas non plus), une simple recherche sur google vous permettra sans doute d’en apprendre davantage.
      Bonne continuation

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.