Importer automatiquement les feuilles d’un fichier Excel dans R

importer des feuilles excel dans R

J’ai déjà écrit plusieurs articles sur l’importation de données dans R, notamment à partir de fichiers csv et text (ici et  ), ou encore pour importer de façon automatique plusieurs fichiers csv qui sont préalablement placés dans un même dossier.

Mais comment faire, lorsque les données que l’on souhaite importer sont dans des feuilles séparées d’un fichier Excel ? On peut évidemment passer chaque feuille en csv, les placer dans un dossier et toutes les importer de façon automatisée. Mais ce n’est pas très optimal, surtout quand on a plusieurs dizaine de feuilles.

Dans cet article, je vais donc vous montrer comment importer très simplement toutes les feuilles d’un fichier Excel. Et si ces feuilles ont le même format, vous aurez aussi sans doute besoin de les assembler dans un seul et même tableau de données. Je vais également vous montrer comment le faire.

1. Les data

Pour illustrer cet article, je vais utiliser les données des chiffres départementaux mensuels relatifs aux crimes et délits enregistrés par les services de police et de gendarmerie depuis janvier 1996.
disponibles sur data.gouv.fr:

importer des feuilles Excel avec R

 

Le fichier Excel importé, nommé “tableaux-4001-ts (1)” contient les chiffres d’une centaine de délits recensés entre janvier 2000 et janvier 2019. La première feuille contient les données pour l’ensemble de la France, la seconde feuille contient les données de la France métropolitaine, et les feuilles suivantes contiennent les données pour chaque département, individuellement :

Lire des les feuilles d'un fichier Excel dans R

 

2. Organisation du workflow

Je vous conseille d’organiser votre travail sous la forme d’un Rproject, avec un dossier “data” dans lequel vous placez le fichier Excel que vous souhaitez importer :

Projet R

 

Pour plus d’informations sur l’organisation en R project, consultez cet article. 

Pour plus d’informations sur les scripts en rmarkdown, consultez l’article Guide de démarrage en R markdown.

3. Importation des données

Pour réaliser cette importation, nous allons utiliser le package readxl:

 

A ma connaissance ce package n’a pas de cheatsheet mais il existe une page d’aide détaillée ici.

Nous allons également nous servir de la fonction here() du package here pour créer le chemin du fichier de données “tableaux-4001-ts (1)” qui se trouve dans le dossier “data” du R project. Ce chemin sera passé en argument de la fonction d’importation.

 3.1 Importation feuille par feuille

3.1.1 Récupération du nombre de feuilles

Pour cela, on utilise la fonction excel_sheets() :

 

Il y a donc 109 feuilles

Remarque : dans la syntaxe précédente, here:: correspond au package here, et le second here correspond à la fonction. Cette syntaxe permet donc de dire à R “prends la fonction here() du package here. Cette précision du package permet de ne pas avoir de conflit avec d’autres packages qui contiendraient également une fonction here(). Pour bien comprendre la création du chemin, vous pouvez utiliser la commande suivante :

 

Vous trouverez plus d’informations sur l’utilisation de cette fonction ici :

3.1.2 Création des data frames

Pour cela, on utilise une boucle for avec un indice allant de i=1 à i=109 (le nombre de feuilles). A chaque tour de la boucle, c’est à dire pour chaque feuille :

  1. On stocke le nom de la feuille dans la variable name.
  2. On crée une nouvelle variable name (name2) en ajoutant “sheet_” devant le nom de la feuille (name). Cette étape est nécessaire pour stocker les données dans un objet, car R ne peut pas créer d’objet nommé uniquement avec des chiffres.
  3. On lit et stocke les données de la feuille i, en utilisant la fonction read_excel et son argument sheet.

4.On ajoute une colonne “sheet” dans laquelle on écrit le nom de la feuille (utile si on veut assembler plusieurs data frames par la suite).
5. On assigne les données au nouveau nom de la feuille (name2), c’est ce qui permet de créer le data frame avec le nom souhaité.

<!– –>

 

Si tout se passe bien, vous allez voir apparaître les data frames dans la fenêtre “Global Environment” :

Imorter les données de feuilles Excel dans R

 

Remarque 1 : si vos feuilles ne sont pas nommées avec des chiffres, il n’est pas nécessaire de renommer la feuille dans la boucle.

Remarque 2 : plutôt que d’utiliser les indices dans la boucle for, il est aussi possible d’employer directement le nom des feuilles, en spécifiantsheet=name dans la fonction read_excel():

 

 3.2 Importation des feuilles et création d’un seul fichier global

Ici, dans notre exemple, les feuilles des départements 1 à 95, ainsi que les deux départements de la Corse (2A, 2B) ont le même nombre de colonnes. On peut donc avoir envie de créer un seul fichier contenant les données de tous ces départements.

3.2.1 Récupération des indices des feuilles souhaitées

Ici, je souhaite compiler les feuilles relatives aux différents départements sans les DOM et les TOM. Je peux voir qu’il s’agit des feuilles correspondant aux indices 3 à 98.

Je vérifie que j’ai bien sélectionné les bons indices :

 

3.2.2 Création du fichier assemblé :

On charge le package dplyr pour pouvoir utiliser la fonction bind_rows() qui permet d’assembler les lignes de deux data frames :

 

On commence par initialiser un data frame vide, que je nomme “delits_fr” :

 

On utilise ensuite une boucle for avec les indices des feuilles concernées, définis précédemment, c’est à dire de 3 à 98. A chaque tour :

  1. On récupère le nom de la feuille.
  2. On récupère et stocke les données relatives à la feuille considérée.
  3. On ajoute une variable contenant le code du département (le nom de la feuille).
  4. On colle les données aux données déjà assemblées contenues dans delits_fr (vide au premier tour) avec la fonction bind_rows().
  5. On supprime les objet temporaires “name” et “data”

<!– –>

 

Le fichier créé comporte 10272 lignes :

 

Ce chiffre correspondent au 107 lignes de chaque feuilles * les 96 feuilles :

 

4. Export du fichier compilé

Si vous souhaitez exporter le fichier compilé créé, vous pouvez le faire avec la fonction write.csv2(), et en utilisant la fonction here(), comme ceci :

 

Le fichier est alors exporté dans le dossier “data” du R project.

5. Pour aller plus loin

Pour analyser ensuite les données, il peut être plus intéressant de les passer dans un format “long”. Pour plus de d’information, vous pouvez consulter cet article.

6. Conclusion

J’espère que ce court article très pratico-pratique vous évitera quelques écueils dans l’importation des données contenues dans de multiples feuilles Excel, et qu’il vous permettra de gagner du temps dans vos analyses.

Et si cet article vous a plus ou vous a été utile, n’oubliez pas de le télécharger 😉

 

Crédits Photos : Esa Riutta.

Continuez votre lecture

Partager l'article
  •  
  •  
  •  
  •  
  •  
    27
    Partages
  • 27
  •  
  •  
  •  
  •  

3 commentaires

  1. xavier faure Répondre

    bonsoir,
    une variante sans utiliser de boucle for avec le package purrr:
    resultat <- map_df(3:98,~read_excel("tableaux-4001-ts.xlsx",sheet =.x))
    cordialement

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour,
      merci pour votre commentaire et le partage de la ligne de commande. Je connais mal ces fonctions map qui sont pourtant très pratiques. Je vais essayer de me pencher dessus dans les prochaines semaines.
      Bonne journée.

Laisser un commentaire

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