Adds labels describing the summary statistics presented for each variable in the tbl_summary / tbl_svysummary table.

add_stat_label(x, location = NULL, label = NULL)



Object with class tbl_summary from the tbl_summary function or with class tbl_svysummary from the tbl_svysummary function


location where statistic label will be included. "row" (the default) to add the statistic label to the variable label row, and "column" adds a column with the statistic label.


a list of formulas or a single formula updating the statistic label, e.g. label = all_categorical() ~ "No. (%)"


A tbl_summary or tbl_svysummary object


When using add_stat_label(location='row') with subsequent tbl_merge(), it's important to have somewhat of an understanding of the underlying structure of the gtsummary table. add_stat_label(location='row') works by adding a new column called "stat_label" to x$table_body. The "label" and "stat_label" columns are merged when the gtsummary table is printed. The tbl_merge() function merges on the "label" column (among others), which is typically the first column you see in a gtsummary table. Therefore, when you want to merge a table that has run add_stat_label(location='row') you need to match the "label" column values before the "stat_column" is merged with it.

For example, the following two tables merge properly

tbl1 <- trial %>% select(age, grade) %>% tbl_summary() %>% add_stat_label()
tbl2 <- lm(marker ~ age + grade, trial) %>% tbl_regression()

tbl_merge(list(tbl1, tbl2))

Example Output

Example 1

Example 2

Example 3


Daniel D. Sjoberg


tbl <- trial %>%
  dplyr::select(trt, age, grade, response) %>%
  tbl_summary(by = trt)

# Example 1 ----------------------------------
# Add statistic presented to the variable label row
add_stat_label_ex1 <-
  tbl %>%
    # update default statistic label for continuous variables
    label = all_continuous() ~ "med. (iqr)"

# Example 2 ----------------------------------
add_stat_label_ex2 <-
  tbl %>%
    # add a new column with statistic labels
    location = "column"

# Example 3 ----------------------------------
add_stat_label_ex3 <-
  trial %>%
  select(age, grade, trt) %>%
    by = trt,
    type = all_continuous() ~ "continuous2",
    statistic = all_continuous() ~ c("{mean} ({sd})", "{min} - {max}"),
  ) %>%
  add_stat_label(label = age ~ c("Mean (SD)", "Min - Max"))