Le package ‘flextable’ (Gohel and Skintzos 2023) fourni une fonction as_flextable()
qui permet de transformer les tableaux créés avec le package ‘tables’ (Murdoch 2023)
en flextable.
La fonction tables::tabular()
est un outil puissant qui permet aux utilisateurs
de créer facilement des tableaux croisés simples et complexes. La fonction
as_flextable()
est simple à utiliser, elle transforme les objets ‘tables’
en objets ‘flextable’ et vous permet d’enrichir le tableau avec des informations
et/ou du formatage.
Le package ‘tables’ est décrit par son auteur comme suivant :
The tables package provides a formula-driven interface for computing the contents of tables and formatting them. It was inspired by SAS PROC TABULATE, but is not compatible with it.
The user computes a table object by specifying a formula, with the left-hand side giving the rows, and the right-hand side giving the columns; the formula describes the summary functions to apply and how to organize them. […]
La combinaison de ces deux packages offre la possibilité de créer très facilement des tableaux croisés, de les empiler ou de les filtrer, puis de les formater avec “flextable” et de bénéficier de toute une série de fonctionnalités de formatage ainsi que de la possibilité de les exporter dans les formats de sortie pris en charge par “flextable”.
Exemple avec tabular
Créons un tableau croisée d’agrégations basée sur le jeu de
données penguins
fourni par le package ‘palmerpenguins’ (Horst, Hill, and Gorman 2022) :
library(tables)
library(palmerpenguins)
Mean <- function(x) mean(x, na.rm = TRUE)
Sd <- function(x) sd(x, na.rm = TRUE)
tab <- tabular(
table = (species + 1) * island ~
(n = 1) + Format(digits = 2) *
(bill_depth_mm + body_mass_g) * (Mean + Sd),
data = penguins)
print(tab)
#>
#> bill_depth_mm body_mass_g
#> species island n Mean Sd Mean Sd
#> Adelie Biscoe 44 18.37 1.19 3709.66 487.73
#> Dream 56 18.25 1.13 3688.39 455.15
#> Torgersen 52 18.43 1.34 3706.37 445.11
#> Chinstrap Biscoe 0 NaN NA NaN NA
#> Dream 68 18.42 1.14 3733.09 384.34
#> Torgersen 0 NaN NA NaN NA
#> Gentoo Biscoe 124 14.98 0.98 5076.02 504.12
#> Dream 0 NaN NA NaN NA
#> Torgersen 0 NaN NA NaN NA
#> All Biscoe 168 15.87 1.82 4716.02 782.86
#> Dream 124 18.34 1.13 3712.90 416.64
#> Torgersen 52 18.43 1.34 3706.37 445.11
Transformation en flextable
Un appel simple à as_flextable()
produit un flextable assez similaire
aux sorties de la fonction tabular()
:
as_flextable(tab)
species | island | bill_depth_mm | body_mass_g | |||
---|---|---|---|---|---|---|
n | Mean | Sd | Mean | Sd | ||
Adelie | Biscoe | 44 | 18.37 | 1.19 | 3709.66 | 487.73 |
Dream | 56 | 18.25 | 1.13 | 3688.39 | 455.15 | |
Torgersen | 52 | 18.43 | 1.34 | 3706.37 | 445.11 | |
Chinstrap | Biscoe | 0 | NaN | NA | NaN | NA |
Dream | 68 | 18.42 | 1.14 | 3733.09 | 384.34 | |
Torgersen | 0 | NaN | NA | NaN | NA | |
Gentoo | Biscoe | 124 | 14.98 | 0.98 | 5076.02 | 504.12 |
Dream | 0 | NaN | NA | NaN | NA | |
Torgersen | 0 | NaN | NA | NaN | NA | |
All | Biscoe | 168 | 15.87 | 1.82 | 4716.02 | 782.86 |
Dream | 124 | 18.34 | 1.13 | 3712.90 | 416.64 | |
Torgersen | 52 | 18.43 | 1.34 | 3706.37 | 445.11 |
Il utilise les paramètres par défaut de flextable dans la mesure du possible, il est recommandé de les définir une fois par session.
set_flextable_defaults(
font.family = "Open Sans",
font.color = "#333333",
digits = 2,
big.mark = "'",
na_str = "", nan_str = "",
theme_fun = theme_booktabs)
‘tables’ propose de nombreuses options permettant de formater les tableaux. La transformation flextable préserve les types de colonnes, il est plus facile de post formater le tableau avec la syntaxe de flextable si c’est nécessaire :
as_flextable(tab) |>
colformat_double() |>
theme_vanilla()
species | island | bill_depth_mm | body_mass_g | |||
---|---|---|---|---|---|---|
n | Mean | Sd | Mean | Sd | ||
Adelie | Biscoe | 44 | 18.37 | 1.19 | 3'709.66 | 487.73 |
Dream | 56 | 18.25 | 1.13 | 3'688.39 | 455.15 | |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 | |
Chinstrap | Biscoe | 0 | ||||
Dream | 68 | 18.42 | 1.14 | 3'733.09 | 384.34 | |
Torgersen | 0 | |||||
Gentoo | Biscoe | 124 | 14.98 | 0.98 | 5'076.02 | 504.12 |
Dream | 0 | |||||
Torgersen | 0 | |||||
All | Biscoe | 168 | 15.87 | 1.82 | 4'716.02 | 782.86 |
Dream | 124 | 18.34 | 1.13 | 3'712.90 | 416.64 | |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 |
Le séparateur de lignes
Les séparateurs de groupes peuvent être définis comme des lignes au lieu d’une première colonne afin de réduire la largeur du tableau :
as_flextable(tab, spread_first_col = TRUE) |>
colformat_double()
island | bill_depth_mm | body_mass_g | |||
---|---|---|---|---|---|
n | Mean | Sd | Mean | Sd | |
Adelie | |||||
Biscoe | 44 | 18.37 | 1.19 | 3'709.66 | 487.73 |
Dream | 56 | 18.25 | 1.13 | 3'688.39 | 455.15 |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 |
Chinstrap | |||||
Biscoe | 0 | ||||
Dream | 68 | 18.42 | 1.14 | 3'733.09 | 384.34 |
Torgersen | 0 | ||||
Gentoo | |||||
Biscoe | 124 | 14.98 | 0.98 | 5'076.02 | 504.12 |
Dream | 0 | ||||
Torgersen | 0 | ||||
All | |||||
Biscoe | 168 | 15.87 | 1.82 | 4'716.02 | 782.86 |
Dream | 124 | 18.34 | 1.13 | 3'712.90 | 416.64 |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 |
Améliorer avec flextable
Ajoutons maintenant d’autres personnalisations pour illustrer quelques
fonctionnalités de flextable qui s’utilisent facilement à tabular()
:
- formatage du titre de la ligne avec
as_paragraph()
, - tabulation du contenu avec
prepend_chunks(as_chunk("\t"))
, - remplacement des labels avec
labelizor()
.
ft <- as_flextable(tab, spread_first_col = TRUE,
row_title = as_paragraph(
colorize("species: ", color = "#8f2218"),
colorize(as_b(.row_title), color = "#8f2218")
)) |>
colformat_double() |>
align(j = 1, align = "left") |>
prepend_chunks(i = ~ .is_row_title %in% FALSE, j = 1, as_chunk("\t")) |>
labelizor(part = "header", labels = c(bill_depth_mm = "bill length\n(millimeters)",
body_mass_g = "body mass\n(grams)", island = "Island\nin Palmer\nArchipelago",
n = "Number\nof\npenguins")) |>
labelizor(part = "body", labels = stringr::str_to_title) |>
autofit()
ft
Island | bill length | body mass | |||
---|---|---|---|---|---|
Number | Mean | Sd | Mean | Sd | |
Species: Adelie | |||||
Biscoe | 44 | 18.37 | 1.19 | 3'709.66 | 487.73 |
Dream | 56 | 18.25 | 1.13 | 3'688.39 | 455.15 |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 |
Species: Chinstrap | |||||
Biscoe | 0 | ||||
Dream | 68 | 18.42 | 1.14 | 3'733.09 | 384.34 |
Torgersen | 0 | ||||
Species: Gentoo | |||||
Biscoe | 124 | 14.98 | 0.98 | 5'076.02 | 504.12 |
Dream | 0 | ||||
Torgersen | 0 | ||||
Species: All | |||||
Biscoe | 168 | 15.87 | 1.82 | 4'716.02 | 782.86 |
Dream | 124 | 18.34 | 1.13 | 3'712.90 | 416.64 |
Torgersen | 52 | 18.43 | 1.34 | 3'706.37 | 445.11 |
Ajout dans un document
Il existe des méthodes simples permettant d’exporter un document flextable dans un document :
save_as_docx(ft, path = "flextable-tabular.docx")
save_as_rtf(ft, path = "flextable-tabular.rtf")
save_as_html(ft, path = "flextable-tabular.html")
save_as_image(ft, path = "flextable-tabular.png")
save_as_pptx(ft, path = "flextable-tabular.pptx")
Les fichiers peuvent être téléchargés à partir des liens suivants :
- flextable-tabular.docx
- flextable-tabular.html
- flextable-tabular.rtf
- flextable-tabular.png
- flextable-tabular.pptx
Suivez nous: - Sites recommandés: R-bloggers R weekly Twitter #rstats Jobs for R-users