Experimental lifecycle Function takes a survfit object as an argument, and provides a formatted summary table of the results

tbl_survfit(x, ...)

# S3 method for list
  times = NULL,
  probs = NULL,
  statistic = NULL,
  label = NULL,
  label_header = NULL,
  estimate_fun = NULL,
  missing = NULL,
  conf.level = 0.95,
  reverse = FALSE,
  quiet = NULL,

# S3 method for survfit
tbl_survfit(x, ...)

# S3 method for data.frame
tbl_survfit(x, y, include = everything(), ...)



a survfit object, list of survfit objects, or a data frame. If a data frame is passed, a list of survfit objects is constructed using each variable as a stratifying variable.


For tbl_survfit.data.frame() and tbl_survfit.survfit() the arguments are passed to tbl_survfit.list(). They are not used when tbl_survfit.list() is called directly.


numeric vector of times for which to return survival probabilities.


numeric vector of probabilities with values in (0,1) specifying the survival quantiles to return


string defining the statistics to present in the table. Default is "{estimate} ({conf.low}, {conf.high})"


List of formulas specifying variables labels, e.g. list(age ~ "Age, yrs", stage ~ "Path T Stage"), or a string for a single variable table.


string specifying column labels above statistics. Default is "{prob} Percentile" for survival percentiles, and "Time {time}" for n-year survival estimates


function to format the Kaplan-Meier estimates. Default is style_percent() for survival probabilities and style_sigfig for survival times


text to fill when estimate is not estimable. Default is "--"


Confidence level for confidence intervals. Default is 0.95


Flip the probability reported, i.e. 1 - estimate. Default is FALSE. Does not apply to survival quantile requests


Logical indicating whether to print messages in console. Default is FALSE


outcome call, e.g. y = Surv(ttdeath, death)


Variable to include as stratifying variables.

Example Output

Example 1

Example 2

Example 3

Example 4

See also


Daniel D. Sjoberg


library(survival) # Example 1 ---------------------------------- # Pass single survfit() object tbl_survfit_ex1 <- tbl_survfit( survfit(Surv(ttdeath, death) ~ trt, trial), times = c(12, 24), label_header = "**{time} Month**" ) # Example 2 ---------------------------------- # Pass a data frame tbl_survfit_ex2 <- tbl_survfit( trial, y = Surv(ttdeath, death), include = c(trt, grade), probs = 0.5, label_header = "**Median Survival**" ) # Example 3 ---------------------------------- # Pass a list of survfit() objects tbl_survfit_ex3 <- list(survfit(Surv(ttdeath, death) ~ 1, trial), survfit(Surv(ttdeath, death) ~ trt, trial)) %>% tbl_survfit(times = c(12, 24)) # Example 4 Competing Events Example --------- # adding a competing event for death (cancer vs other causes) library(dplyr, warn.conflicts = FALSE, quietly = TRUE) trial2 <- trial %>% mutate( death_cr = case_when( death == 0 ~ "censor", runif(n()) < 0.5 ~ "death from cancer", TRUE ~ "death other causes" ) %>% factor() ) survfit_cr_ex4 <- survfit(Surv(ttdeath, death_cr) ~ grade, data = trial2) %>% tbl_survfit(times = c(12, 24), label = "Tumor Grade")
#> tbl_survfit: Multi-state model detected. Showing probabilities into state 'death from cancer'