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.
Pour illustrer cet exemple, j’ai placé 10 fichiers csv dans un dossier nommé data (placé à la racine de mon projet R).
Pour importer tous ces fichiers csv en une fois, le principe est de :
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,read.csv2()
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
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).
Voici, par exemple, les premières lignes des deux premiers fichiers:
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 :
list.files()
pour chaque fichier :set_names()
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 ...
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).
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")
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]])
}
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)
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
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.
3 Responses
Merci
Comment importer des fichiers de format ncdf dans r?
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