Codecov test coverage R build status CRAN status Lifecycle: maturing


The {gtsummary} package provides an elegant and flexible way to create publication-ready analytical and summary tables using the R programming language. The {gtsummary} package summarizes data sets, regression models, and more, using sensible defaults with highly customizable capabilities.

By leveraging {broom}, {gt}, and {labelled} packages, {gtsummary} creates beautifully formatted, ready-to-share summary and result tables in a single line of R code!

Check out the examples below, review the vignettes for a detailed exploration of the output options, and view the gallery for various customization examples.


The {gtsummary} package was written as a companion to the {gt} package from RStudio. You can install {gtsummary} with the following code.


Install the development version of {gtsummary} with:



Summary Table

Use tbl_summary() to summarize a data frame.


Example basic table:

# make dataset with a few variables to summarize
trial2 <- trial %>% select(age, grade, response, trt)

# summarize the data with our package
table1 <- tbl_summary(trial2)

There are many customization options to add information (like comparing groups) and format results (like bold labels) in your table. See the tbl_summary() tutorial for many more options, or below for one example.

table2 <- 
    by = trt, # split table by group
    missing = "no" # don't list missing data separately
  ) %>%
  add_n() %>% # add column with total number of non-missing observations
  add_p() %>% # test for a difference between groups
  modify_header(label = "**Variable**") %>% # update the column header

Regression Models

Use tbl_regression() to easily and beautifully display regression model results in a table. See the tutorial for customization options.

mod1 <- glm(response ~ trt + age + grade, trial, family = binomial)

t1 <- tbl_regression(mod1, exponentiate = TRUE)

Side-by-side Regression Models

You can also present side-by-side regression model results using tbl_merge()


# build survival model table
t2 <-
  coxph(Surv(ttdeath, death) ~ trt + grade + age, trial) %>%
  tbl_regression(exponentiate = TRUE)

# merge tables 
tbl_merge_ex1 <-
    tbls = list(t1, t2),
    tab_spanner = c("**Tumor Response**", "**Time to Death**")

Review even more output options in the table gallery.

gtsummary + R Markdown

The {gtsummary} package was written to be a companion to the {gt} package from RStudio. But not all output types are supported by the {gt} package. Therefore, we have made it possible to print {gtsummary} tables with various engines.

Review the gtsummary + R Markdown vignette for details.

Save Individual Tables

{gtsummary} tables can also be saved directly to file as an image, RTF, LaTeX, and Word file.

tbl %>%
  as_gt() %>%
  gt::gtsave(filename = ".") # use extensions .html .tex .ltx .rtf

For a Word file, use

tbl %>%
  as_flex_table() %>%


Big thank you to [@jeffreybears]( for the hex sticker!

Please note that the {gtsummary} project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms. Thank you to all contributors!
[@ablack3](, [@aghaynes](, [@ahinton-mmc](, [@albertostefanelli](, [@alexis-catherine](, [@anaavu](, [@andrader](, [@anevaluator](, [@angelgar](, [@arbet003](, [@arnmayer](, [@asshah4](, [@awcm0n](, [@barthelmes](, [@BeauMeche](, [@benediktclaus](, [@calebasaraba](, [@CarolineXGao](, [@Chris-M-P](, [@chrisleitzinger](, [@clmawhorter](, [@CodieMonster](, [@coreysparks](, [@ctlamb](, [@davidgohel](, [@davidkane9](, [@dax44](, [@ddsjoberg](, [@DeFilippis](, [@denis-or](, [@djbirke](, [@eamoncaddigan](, [@ElfatihHasabo](, [@emilyvertosick](, [@ercbk](, [@fh-jsnider](, [@gjones1219](, [@gorkang](, [@GuiMarthe](, [@hughjonesd](, [@iaingallagher](, [@IndrajeetPatil](, [@IsadoraBM](, [@j-tamad](, [@jalavery](, [@jeanmanguy](, [@jemus42](, [@jennybc](, [@JeremyPasco](, [@JesseRop](, [@jflynn264](, [@jjallaire](, [@joelgautschi](, [@JonGretar](, [@juseer](, [@jwilliman](, [@karissawhiting](, [@khizzr](, [@kmdono02](, [@larmarange](, [@leejasme](, [@loukesio](, [@lspeetluk](, [@ltin1214](, [@lucavd](, [@maia-sh](, [@margarethannum](, [@Marsus1972](, [@matthieu-faron](, [@mbac](, [@MelissaAssel](, [@michaelcurry1123](, [@moleps](, [@MyKo101](, [@oranwutang](, [@Pascal-Schmidt](, [@proshano](, [@raphidoc](, [@ryzhu75](, [@sachijay](, [@sammo3182](, [@sbalci](, [@simonpcouch](, [@slb2240](, [@slobaugh](, [@StaffanBetner](, [@storopoli](, [@tamytsujimoto](, [@TarJae](, [@THIB20](, [@tjmeyers](, [@tldrcharlene](, [@tormodb](, [@UAB-BST-680](, [@uriahf](, [@xkcococo](, [@yonicd](, [@zabore](, [@zachariae](, [@zeyunlu](, [@zlkrvsm](, and [@zongell-star](