Skip to contents

Comment faire un tableau

Pour faire un tableau, nous conseillons vivement d’utiliser gt. Le principe est assez simple, un peu comme dans ggplot2 on ajoute des couches qui petit à petit construisent le tableau. Ca peut paraître fastidieux, mais ça ne l’est pas tant que ça : c’est ce qu’on fait dans excel ou word pour mettre en forme un tableau. L’intérêt de gt c’est de dissocier la phase données de la phase mise en page.

Le manuel de gt est d’une lecture simple, avec plein d’exemples : Easily Create Presentation-Ready Display Tables • gt (rstudio.com)

Le code d’un gt est du genre :

library(gt)

# le fichier excel est préformaté, un onglet contient les données 
# prêtes à l'utilisation
readxl::read_xlsx(
  "analyses/Tables/patrimoine menages.v2.xlsx", 
  sheet = "masspat") |> 
  # on filtre les lignes les colonnes dont on a besoin
  filter(tranche %in% c("0-90%", "90-99%", "99-100%", "Total")) |> 
  select(-revraw) |> 
  # on les met dans l'ordre souhaité, 
  # plus le tibble est comme le tableau final le mieux c'est
  relocate(tranche, revdisp) |> 
  # pour avoir les chiffres par tête on fait un dernier mutate
  mutate(across(c(revdisp, tot, fi, pro, imm, autre), ~.x/30.5*1000/men)) |>
  select(-men) |> 
  mutate(tranche = str_replace(tranche, "Total", "Moyenne")) |>
  # gt sert à fabriquer le tableau mis en forme
  # a partir de là, plus de manip possible
   gt() |> 
  # le spanner regroupe des colonnes sous un même label
   tab_spanner(columns = -c(tranche, revdisp), label  = "Patrimoine") |> 
  # on a gardé les noms simples dans les données, on les traduit en clair ici
  # on privilégie cette approche : qui permet de corriger dans le qmd le texte
  # qui permet de traduire
  # qui permet d'uniformiser les labels si on a plusieurs tableaux
  cols_label(tranche = "", revdisp = "Revenu disponible", 
             tot = "Total", fi = "Financier", 
             pro  = "Professionnel", imm = "Immobilier", 
             autre = "Autres") |> 
  # idem, on passe des nombres, on les formatte ici
  fmt_number(columns = -tranche, scale = 1,
             n_sigfig = 3,  decimals = 0, sep_mark = " " ) |> 
  # on met en gras en en darkred une ligne -- notez la syntaxe élégante de gt
  tab_style(style = cell_text(weight = "bold", color = "darkred"), 
            locations = cells_body(rows = tranche == "Moyenne")) |> 
  # indispensable, les sources. md() permet d'avoir un texte enrichi qui comprend markdown
  # <br> retourne à la ligne dans la note
  # on met les notes ici, ca permet corrections, uniformisation et traduction
  tab_source_note(
    md(
      "Revenu disponible brut et actifs bruts (hors passif) par ménage, en euros, année 2022
      <br>Calculs réalisés à partir de l'enquête patrimoine des ménages 2017-2018 de l'Insee croisés avec les comptes nationaux du patrimoine de l'Insee de 2022
      <br>*Sources* : Insee, calculs OFCE"))

D’autres solutions pour les tableaux

Le pire du pire est de mettre le tableau comme une copie d’écran d’excel ou d’un pdf. C’est à banir.

Moins pire est d’utiliser la syntaxe markdown. Ca peut paraître plus simple mais c’est rapidement dépassé et permet très peu de présentation avancée.