linelist %>%
group_by(hospital) %>% # group rows by hospital
slice_max(date, n = 1, with_ties = F) # s'il y a égalité de date, prendre la première1 Notes techniques et choix éditoriaux
Nous décrivons ici les choix pédagogiques, le style et les décisions éditoriales spécifiques prises lors de l’écriture de ce guide.
1.1 R pour l’épidémiologie appliquée et la santé publique
Objectif: Servir de manuel de référence rapide du code R (en ligne et hors line) avec des exemples centrés sur la tâche qui traitent des problèmes épidémiologiques courants.
1.2 Approche et style
Le public visé par ce manuel est large. Nous espérons qu’il sera utile aux épidémiologistes novices en R, mais aussi aux utilisateurs expérimentés à la recherche de bonnes pratiques et d’astuces. L’ouvrage doit donc être à la fois accessible et succinct. Notre cherchons à fournir juste assez d’explications textuelles pour qu’une personne débutante en R puisse appliquer le code et comprendre ce qu’il fait.
En conséquences de quoi, ce guide est :
- un ouvrage de référence de code, accompagné d’exemples relativement brefs, et non un manuel complet sur R ou la science des données
- un guide R à utiliser dans le cadre de l’épidémiologie appliquée, et non un manuel sur les méthodes ou la science de l’épidémiologie appliquée
- un document évolutif : les paquets R optimaux pour une tâche donnée changent souvent et nous sommes ouverts à toute discussion sur les paquets à privilégier dans ce manuel.
Paquets R
Tellement de possibilités…
Un aspect difficile de l’apprentissage de R est de savoir quel paquet R utiliser pour une tâche donnée. Il n’est pas rare que l’on se décarcasse à écrire vingt (cent ?) lignes de code, pour se rendre compte plus tard qu’il existe un paquet R qui donne le même résultat recheré en une seule ligne de commande !
Dans ce guide, nous essayons de vous proposer au moins deux façons de réaliser chaque tâche : une méthode éprouvée (probablement dans R de base ou utilisant le tidyverse) et un paquet R spécialement conçu à cet effet. Nous voulons que vous ayez les deux options, au cas où vous ne pourriez pas télécharger un paquet donné ou si celui-ci ne vous convient pas.
Pour choisir les paquets à utiliser, nous avons donné la priorité aux paquets R et aux approches qui ont été testés et approuvés par la communauté, qui minimisent le nombre de paquets utilisés dans une session de travail typique, qui sont stables (ne changent pas très souvent) et qui accomplissent la tâche simplement et proprement.
Ce manuel donne généralement la priorité aux paquets et fonctions R du méta-paquet tidyverse. Tidyverse est une collection de paquets R conçus pour la science des données, et qui partagent une grammaire et des structures de données sous-jacentes. Tous les paquets du Tidyverse peuvent être installés ou chargés séparément, ou en masse via le paquet tidyverse. Pour en savoir plus, consultez le site Web du tidyverse.
Nous proposons également souvent des options de code utilisant R de base (les paquets et fonctions fournis avec R à l’installation). En effet, nous sommes conscients que certains lecteurs de ce livre ne disposent pas d’un accès Internet fiable pour télécharger des paquets supplémentaires.
Expliciter quelle fonction appartient à quel paquet
Il est souvent frustrant lorsque l’on suit un tutoriel R de ne pas savoir de quel paquet provient une fonction (et donc de ne pas pouvoir l’utiliser immédiatement dans notre code) !
Dans ce guide, les noms des paquets seront écrits en gras (par exemple dplyr) et les fonctions sont écrites comme ceci : mutate(). Nous nous efforçons d’être explicites quant au paquet dont provient une fonction, soit en faisant référence au paquet dans le texte voisin, soit en spécifiant le paquet explicitement dans le code, comme ceci : dplyr::mutate(). Cela peut sembler redondant, mais nous le faisons volontairement.
Consultez la page sur les Bases de R pour en savoir plus sur les paquets et les fonctions.
Choix d’yn style de code
Dans le manuel, nous allons fréquemment à la ligne, ce qui rend notre code “long”. Nous faisons cela pour plusieurs raisons :
- cela permet d’écrire des commentaires explicatifs avec
#adjacents à la commande qu’ils décrivent,
- généralement, un code plus long (vertical) est plus facile à lire,
- il est plus facile à lire sur un écran étroit (pas de défilement latéral nécessaire),
- il est plus facile de savoir quels arguments appartiennent à quelle fonction grâce aux indentations.
Par conséquent, un bout de code code qui pourrait être écrit comme ceci :
…est écrit comme cela :
linelist %>%
group_by(hospital) %>% # groupe les lignes par hopital
slice_max(
date, # Garde les lignes avec la date maximun à l'intérieur de chaque groupe
n = 1, # Ne garder que la date maximum
with_ties = F) # S'il y a égalité de date, prendre la premièreLe code R n’est généralement pas affecté par les nouvelles lignes ou les indentations. Lorsque vous écrivez du code, si vous allez à la ligne après une virgule, l’indentation automatique s’applique.
Nous utilisons beaucoup d’espaces (par exemple n = 1 au lieu de n=1) parce que c’est plus facile à lire pour beaucoup de personnes. Pensez aux gens qui lisent votre code !
Nomenclature
Dans ce manuel, nous faisons généralement référence aux “colonnes” et aux “lignes” plutôt qu’aux “variables” et “observations”. Comme l’explique cette introduction aux “données ordonnées”, la plupart des jeux de données statistiques épidémiologiques se composent structurellement de lignes, de colonnes et de valeurs.
Les variables contiennent les valeurs qui mesurent le même attribut sous-jacent (comme le groupe d’âge, le résultat ou la date d’apparition des symptomes). Les observations contiennent toutes les valeurs mesurées sur la même unité (par exemple, une personne, un site ou un échantillon de laboratoire). Ces aspects peuvent donc être plus difficiles à définir de manière tangible.
Dans les ensembles de données “ordonnés” (tidy data en anglais), chaque colonne est une variable, chaque ligne est une observation et chaque cellule est une valeur unique. Cependant, certains jeux de données que vous rencontrerez ne correspondront pas à ce modèle - un ensemble de données au format “large” peut avoir une variable répartie sur plusieurs colonnes (voir un exemple à la page Transformation long-large). De même, les observations peuvent être réparties sur plusieurs lignes.
La majeure partie de ce manuel porte sur le nettoyage et la transformation des données, et il est donc plus pertinent de se référer aux structures de données concrètes que sont les lignes et les colonnes qu’aux observations et aux variables plus abstraites. Les exceptions se produisent principalement dans les pages sur l’analyse des données, où vous verrez davantage de références aux “variables” et aux “observations”.
Notes
Voici les types de notations utilisées dans le guide :
NOTE: Ceci est une note
TIP: Ceci est un conseil ou une astuce.
CAUTION: Ceci vous invite à bien prêter attention.
DANGER: Ceci est un avertissement.
1.3 Choix techniques
Ci-dessous, nous décrivons les principales décisions concernant le choix des paquets et des fonctions. Si vous n’êtes pas d’accord ou si vous souhaitez proposer un nouvel outil à examiner, veuillez rejoindre/démarrer une conversation sur notre page Github.
Tableau des paquets, fonction et autres choix techniques
| Sujet | Considéré | Choisi | Explication brève |
|---|---|---|---|
| Approche générale | tidyverse, data.table, base | tidyverse, avec un chapitre sur data.table, et mentions d’alternatives en R de base pour les lecteurs avec une connexion Internet faible | lisibilité accrue, universel, paquets très répandus |
| Importation des paquets |
library(),install.packages(), require(), pacman
|
pacman | Simplification et code plus court pour les cas avec de nombreux paquets à installer puis importer |
| Import et export de données | rio, de nombreux paquets spécialisés | rio | Gère un grand nombre de format de jeux de données |
| Résumer des données agrégées |
dplyr group_by(), stats aggregate()
|
dplyr group_by()
|
Reste cohérent avec nos choix d’utiliser le tidyverse |
| Transformation long-large |
tidyr (fonctions pivot_XXX), reshape2 (melt/cast), tidyr (spread/gather) |
tidyr (fonctions pivot_XXX) |
reshape2 est en fin de vie, tidyr utilise les fonctions pivot_XXX dès la versions v1.0.0 |
| Nettoyer les noms des colonnes | linelist, janitor | janitor | Janitor est utilisé pour plusieus tâches dans le guide (optimisation des paquets) |
| Semaines epi | lubridate, aweek, tsibble, zoo | lubridate en général, avec utilisation ponctuelle d’autres paquets pour des cas spécifiques | La grande flexibilité de lubridate, la cohérence avec le tidyverse, une meilleure maintenance future (?) |
| Labels ggplot |
labs(), ggtitle()/ylab()/xlab()
|
labs() |
Simplicité, tous les labels dans la même commande |
| Conversion en facteur |
factor(), forcats
|
forcats | ses différentes fonctions convertissent aussi en facteur dans la même commande |
| Courbes épidémiques | incidence, ggplot2, EpiCurve | incidence2 pour le plus rapide, ggplot2 pour les détails | fiabilité |
| Concaténation |
paste(), paste0(), str_glue(), glue()
|
str_glue() |
syntaxe plus simple que paste(); dans stringr
|
1.4 Révisions majeures
| Date | Changements majeurs |
|---|---|
| 10 Mai 2021 | Publication de la version 1.0.0 |
| 20 Nov 2022 | Publication de la version 1.0.1 |
NEWS Avec la version 1.0.1, les changements suivants ont été mis en œuvre :
- Mise à jour vers la version 4.2 de R
- Nettoyage des données : remplacement de {linelist} par {matchmaker}, suppression d’une ligne inutile dans l’exemple
case_when().
- Dates : remplacement de {linelist}
guess_date()par {parsedate}parse_date(). - Pivot : légère mise à jour de
pivot_wider()id_cols=`.
- Analyse d’enquête : remplacement de
plot_age_pyramid()parage_pyramid(), légère modification du code du tracé alluvial.
- Graphiques de chaleur : ajout de
ungroup()au chunkagg_weeks.
- Graphiques interactifs : ajout de
ungroup()au chunk qui faitagg_weekspour queexpand()fonctionne comme prévu.
- Séries temporelles : ajout de
data.frame()autour des objets dans toutes les commandestrending::fit()etpredict().
- Analyse des combinaisons : Remplacer
case_when()parifelse()et ajouter le code optionnelacross()pour préparer les données. - Chaînes de transmission : Mise à jour vers une version plus récente de {epicontacts}
1.5 Remmerciements
Cet ouvrage est le fruit du travail d’une équipe internationale d’épidémiologistes, qui se sont appuyés sur leur expérience auprès d’organisations telles que les agences sanitaires locales, régionales, provinciales et nationales de divers pays, l’Organisation mondiale de la santé (OMS), Médecins Sans Frontières (MSF), les systèmes hospitaliers et les institutions universitaires.
Ce guide n’est pas un produit approuvé par une organisation spécifique. Bien que nous nous soyons efforcés à être précis, nous ne pouvons fournir aucune garantie quant au contenu de ce livre.
Auteurs et contributeurs
Editeur: Neale Batra
Commité éditorial Neale Batra, Alex Spina, Amrish Baidjoe, Pat Keating, Henry Laurenson-Schafer, Finlay Campbell
Auteurs et autrices: Neale Batra, Alex Spina, Paula Blomquist, Finlay Campbell, Henry Laurenson-Schafer, Isaac Florence, Natalie Fischer, Aminata Ndiaye, Liza Coyer, Jonathan Polonsky, Yurie Izawa, Chris Bailey, Daniel Molling, Isha Berry, Emma Buajitti, Mathilde Mousset, Sara Hollis, Wen Lin, Olivia Boyd
Relecture: Pat Keating, Annick Lenglet, Margot Charette, Danielly Xavier, Esther Kukielka, Michelle Sloan, Aybüke Koyuncu, Rachel Burke, Kate Kelsey, Berhe Etsay, John Rossow, Mackenzie Zendt, James Wright, Laura Haskins, Flavio Finger, Tim Taylor, Jae Hyoung Tim Lee, Brianna Bradley, Wayne Enanoria, Manual Albela Miranda, Molly Mantus, Pattama Ulrich, Joseph Timothy, Adam Vaughan, Olivia Varsaneux, Lionel Monteiro, Joao Muianga
Illustrations: Calder Fong
Traduction: Aminata Ndiaye, Olivia Boyd, Anais Legrand, Marie-Amelie Degail-Chabrat, Yves Amevoin, Laura Downham, Lise Grout, Margot Charette, Mathilde Mousset, Noe Guincko, Mor Ndiaye, Elysée Junior, Nerisson Joseph, Bryan Tegomoh, Marcel Woung, Amy Mikhail, Lucie Fournier, Paul-Evans Ehouman, Kelly McCain
Financements
Le manuel a reçu un financement de soutien via une subvention d’urgence COVID-19 pour le renforcement des capacités de la part de TEPHINET, le réseau mondial des programmes de formation en épidémiologie de terrain (FETP).
Le réseau des anciens d’EPIET (EAN) a fourni un soutien administratif (Annika Wendland en particulier). EPIET est le programme européen de formation en épidémiologie d’intervention.
Nous remercions tout particulièrement le Centre Opérationnel d’Amsterdam de Médecins Sans Frontières (MSF OCA) pour son soutien lors de l’élaboration de ce manuel.
Cette publication a été soutenue par l’accord de coopération numéro NU2GGH001873, financé par les Centers for Disease Control and Prevention par le biais de TEPHINET, un programme de “The Task Force for Global Health”. Son contenu relève de la seule responsabilité des auteurs et ne reflète pas les opinions officielles des Centers for Disease Control and Prevention, du Department of Health and Human Services, de The Task Force for Global Health, Inc. ou de TEPHINET.
Inspirations
Nous nous sommes inspiré de multiples tutoriels, livres et vignettes développés par la communauté pour développer ce manuel. Ces ressources, sont crédités dans les chapitres respectifs, mais nous souhaitons citer quelques sources d’inspiration générales que nous utilisons de manière récurrente :
The “R4Epis” project (une collaboration entre MSF et RECON)
R Epidemics Consortium (RECON)
R for Data Science book (R4DS)
bookdown: Authoring Books and Technical Documents with R Markdown
Netlify qui héberge ce site
1.6 Conditions d’utilisation et contribution
License

Ce document est mis à disposition selon les termes de lalicence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International (CC BY-NC-SA 4.0) .
N’hésitez pas à utiliser les contenus de ce manuel dans vos cours et formations en épidémiologie, ou à le conseiller à vos étudiants. Si vous avez des questions sur l’utilisation que vous souhaitez en faire, envoyez un courriel à contact@appliedepi.org.
Citation
Contribuer
Si vous souhaitez contribuer à cet ouvrage, veuillez d’abord nous contacter via les tickets (issues) Github ou par courriel. Nous sommes en train de développer un calendrier de mise à jour et un guide du contributeur.
Veuillez noter que le projet epiRhandbook est publié avec un code de conduite du contributeur. En contribuant à ce projet, vous acceptez de vous conformer à ses conditions.
1.7 Information de session (R, RStudio, paquets)
Vous trouverez ci-dessous les informations sur les versions de R, RStudio et les paquets R utilisés lors de la compilation du guide.
sessioninfo::session_info()─ Session info ───────────────────────────────────────────────────────────────
setting value
version R version 4.6.0 (2026-04-24)
os Ubuntu 26.04 LTS
system x86_64, linux-gnu
ui X11
language en_US:en
collate en_US.UTF-8
ctype en_US.UTF-8
tz Etc/UTC
date 2026-10-05
pandoc 3.7.0.2 @ /usr/bin/ (via rmarkdown)
quarto 1.9.38 @ /usr/local/bin/quarto
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
cli 3.6.6 2026-04-09 [1] RSPM
digest 0.6.39 2025-11-19 [1] RSPM
evaluate 1.0.5 2025-08-27 [1] RSPM
fastmap 1.2.0 2024-05-15 [1] RSPM
htmltools 0.5.9 2025-12-04 [1] RSPM
htmlwidgets 1.6.4 2023-12-06 [1] RSPM
jsonlite 2.0.0 2025-03-27 [1] RSPM
knitr 1.51 2025-12-20 [1] RSPM
otel 0.2.0 2025-08-29 [1] RSPM
rlang 1.2.0 2026-04-06 [1] RSPM
rmarkdown 2.31 2026-03-26 [1] RSPM
sessioninfo 1.2.4 2026-06-04 [1] RSPM
xfun 0.59 2026-06-19 [1] RSPM
yaml 2.3.12 2025-12-10 [1] RSPM
[1] /opt/R/4.6.0/lib/R/library
──────────────────────────────────────────────────────────────────────────────

Comment utiliser ce manuel
Version hors ligne
Voir les instructions de la page Télécharger le manuel et les données.