Produces a nicely formatted table of descriptive statistics for any number of numeric or categorical variables, optionally stratified by a factor.
table1(x, ...)
# Default S3 method
table1(
x,
labels,
groupspan = NULL,
rowlabelhead = "",
transpose = FALSE,
topclass = "Rtable1",
footnote = NULL,
caption = NULL,
render = render.default,
render.strat = table1::render.strat,
extra.col = NULL,
extra.col.pos = NULL,
...
)
# S3 method for class 'formula'
table1(
x,
data,
overall = "Overall",
rowlabelhead = "",
transpose = FALSE,
droplevels = TRUE,
topclass = "Rtable1",
footnote = NULL,
caption = NULL,
render = render.default,
render.strat = table1::render.strat,
render.varlabel = table1::render.varlabel,
extra.col = NULL,
extra.col.pos = NULL,
...
)An object, typically a formula or list of data.frames (see Details).
Further arguments, passed to render.
A list containing labels for variables, strata and groups (see Details).
A vector of integers specifying the number of strata to group together.
A heading for the first column of the table, which contains the row labels.
Logical. Should the table be transposed (i.e. strata as
rows and variables as columns)? This flag is also passed to
render.strat and render.varlabel.
A class attribute for the outermost (i.e. <table>) tag.
A character string to be added as a footnote to the table.
Can also be a vector which results in multiple lines of footnotes.
The default NULL causes the footnote to be omitted.
A character string to be added as a caption to the table.
The default NULL causes the caption to be omitted.
A function to render the table cells (see Details).
A function to render the stratum labels. The first
argument is a named list of data.frames, and it should also accept
... arguments. The default is render.strat, but it can
be overriden with a user-supplied function.
An optional names list of functions that produce extra columns in the table (see Details).
An optional integer vector given the positions of extra columns (see Details).
For the formula interface, a data.frame from which the
variables in x should be taken.
A label for the "Overall" column. Specify NULL or
FALSE to omit the column altogether. By default, the "Overall" column
appears at the right end of the table; to place it on the left instead use a
named character with the name "left", e.g. c(left="Overall").
Should empty factor levels be dropped?
A function to render the variable labels. The first
argument is a vector, and it should also accept ... arguments. The
default is render.varlabel, but it can be overriden with a
user-supplied function.
An object of class "table1".
There are two interfaces, the default, which typically takes a list of
data.frames for x, and the formula interface. The formula
interface is less flexible, but simpler to use and designed to handle the
most common use cases. It is important to use factors appropriately for
categorical variables (i.e. have the levels labeled properly and in the
desired order). The contents of the table can be customized by providing
user-defined `renderer' functions. Customization of the table appearance is
deliberately not attempted, as this is best accomplished with CSS. To
facilitate this, some tags (such as row labels) are given specific classes
for easy CSS selection.
For the formula version, the formula is expected to be a one-sided formula,
optionally with a vertical bar separating the variables that are to appear
as data in the table (as rows) from those used for stratification (i.e.
columns). There can be at most 2 variables for stratification (and only one
if transpose = TRUE is specified), and if 2 are specified, the second
is nested within the first. Stratification variables may not contain missing
values. The formula may contain a dot (".") to refer to "all variables in
data other than those that appear elsewhere in the formula". It is
legitimate to use functions inside the formula to create new variables.
For the default version, is is expected that x is a named
list of data.frames, one for each stratum, with names corresponding to
strata labels.
Extra columns can be added to the table using the extra.col argument.
This is an optional named list of functions, with the names corresponding to
the column headings. Each function will be called once for each variable
included in the table. Each function should expect 2 arguments, the first
being a list, the second the name of the variable. The contents of the
list passed in as the first argument will be the data associated with each
stratum in the table; i.e., one element for each normal column (not extra
column). It is then up the function to compute the value to appear in
the extra column and return it as a string. By default, extra columns will
be placed to the far right, after the normal columns, in the order they are
specified in. This can be overridden, however, using the
extra.col.pos vector of integer positions. For example, to place the
first extra column in position 1 (far left), and the second extra column in
position 3, use extra.col.pos = c(1, 3); any extra columns that are
not assigned positions will be placed to the far right. A typical use case
for extra columns would be a column of p-values for differences between
strata. Note that this feature is not available when the option
transpose = TRUE is specified.
table1(default): The default interface, where x is a list of data.frames.
table1(formula): The formula interface.
dat <- expand.grid(id=1:10, sex=c("Male", "Female"), treat=c("Treated", "Placebo"))
dat$age <- runif(nrow(dat), 10, 50)
dat$age[3] <- NA # Add a missing value
dat$wt <- exp(rnorm(nrow(dat), log(70), 0.2))
label(dat$sex) <- "Sex"
label(dat$age) <- "Age"
label(dat$treat) <- "Treatment Group"
label(dat$wt) <- "Weight"
units(dat$age) <- "years"
units(dat$wt) <- "kg"
# One level of stratification
table1(~ sex + age + wt | treat, data=dat)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Treated<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Overall<br/><span class='stratn'>(N=40)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Sex</span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Male</td>
#> <td>10 (50.0%)</td>
#> <td>10 (50.0%)</td>
#> <td>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Female</td>
#> <td class='lastrow'>10 (50.0%)</td>
#> <td class='lastrow'>10 (50.0%)</td>
#> <td class='lastrow'>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Age<span class='varunits'> (years)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>26.5 (12.0)</td>
#> <td>31.3 (11.1)</td>
#> <td>29.0 (11.6)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Median [Min, Max]</td>
#> <td>24.2 [10.3, 44.3]</td>
#> <td>30.4 [11.4, 50.0]</td>
#> <td>28.6 [10.3, 50.0]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Missing</td>
#> <td class='lastrow'>1 (5.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>1 (2.5%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Weight<span class='varunits'> (kg)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>71.4 (12.5)</td>
#> <td>73.1 (16.8)</td>
#> <td>72.3 (14.7)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Median [Min, Max]</td>
#> <td class='lastrow'>68.9 [56.2, 107]</td>
#> <td class='lastrow'>67.8 [53.9, 109]</td>
#> <td class='lastrow'>68.3 [53.9, 109]</td>
#> </tr>
#> </tbody>
#> </table>
# Two levels of stratification (nesting)
table1(~ age + wt | treat*sex, data=dat)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class="grouplabel"></th>
#> <th colspan="2" class="grouplabel"><div>Treated</div></th>
#> <th colspan="2" class="grouplabel"><div>Placebo</div></th>
#> <th colspan="2" class="grouplabel"><div>Overall</div></th>
#> </tr>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Male<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Female<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Male<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Female<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Male<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Female<br/><span class='stratn'>(N=20)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Age<span class='varunits'> (years)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>25.3 (11.0)</td>
#> <td>27.7 (13.4)</td>
#> <td>32.3 (12.6)</td>
#> <td>30.4 (9.91)</td>
#> <td>29.0 (12.1)</td>
#> <td>29.1 (11.5)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Median [Min, Max]</td>
#> <td>25.6 [10.3, 42.1]</td>
#> <td>23.0 [11.3, 44.3]</td>
#> <td>32.2 [11.4, 50.0]</td>
#> <td>30.2 [14.8, 49.1]</td>
#> <td>28.6 [10.3, 50.0]</td>
#> <td>28.0 [11.3, 49.1]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Missing</td>
#> <td class='lastrow'>1 (10.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>1 (5.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Weight<span class='varunits'> (kg)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>72.1 (16.1)</td>
#> <td>70.6 (8.47)</td>
#> <td>73.3 (21.1)</td>
#> <td>72.9 (12.3)</td>
#> <td>72.7 (18.3)</td>
#> <td>71.8 (10.4)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Median [Min, Max]</td>
#> <td class='lastrow'>67.9 [56.2, 107]</td>
#> <td class='lastrow'>69.2 [58.9, 87.4]</td>
#> <td class='lastrow'>64.2 [53.9, 109]</td>
#> <td class='lastrow'>70.5 [59.8, 97.4]</td>
#> <td class='lastrow'>65.8 [53.9, 109]</td>
#> <td class='lastrow'>70.2 [58.9, 97.4]</td>
#> </tr>
#> </tbody>
#> </table>
# Switch the order or nesting
table1(~ age + wt | sex*treat, data=dat)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class="grouplabel"></th>
#> <th colspan="2" class="grouplabel"><div>Male</div></th>
#> <th colspan="2" class="grouplabel"><div>Female</div></th>
#> <th colspan="2" class="grouplabel"><div>Overall</div></th>
#> </tr>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Treated<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Treated<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Treated<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=20)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Age<span class='varunits'> (years)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>25.3 (11.0)</td>
#> <td>32.3 (12.6)</td>
#> <td>27.7 (13.4)</td>
#> <td>30.4 (9.91)</td>
#> <td>26.5 (12.0)</td>
#> <td>31.3 (11.1)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Median [Min, Max]</td>
#> <td>25.6 [10.3, 42.1]</td>
#> <td>32.2 [11.4, 50.0]</td>
#> <td>23.0 [11.3, 44.3]</td>
#> <td>30.2 [14.8, 49.1]</td>
#> <td>24.2 [10.3, 44.3]</td>
#> <td>30.4 [11.4, 50.0]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Missing</td>
#> <td class='lastrow'>1 (10.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>1 (5.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Weight<span class='varunits'> (kg)</span></span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>72.1 (16.1)</td>
#> <td>73.3 (21.1)</td>
#> <td>70.6 (8.47)</td>
#> <td>72.9 (12.3)</td>
#> <td>71.4 (12.5)</td>
#> <td>73.1 (16.8)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Median [Min, Max]</td>
#> <td class='lastrow'>67.9 [56.2, 107]</td>
#> <td class='lastrow'>64.2 [53.9, 109]</td>
#> <td class='lastrow'>69.2 [58.9, 87.4]</td>
#> <td class='lastrow'>70.5 [59.8, 97.4]</td>
#> <td class='lastrow'>68.9 [56.2, 107]</td>
#> <td class='lastrow'>67.8 [53.9, 109]</td>
#> </tr>
#> </tbody>
#> </table>
# No stratification
table1(~ treat + sex + age + wt, data=dat)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Overall<br/><span class='stratn'>(N=40)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Treatment Group</span></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Treated</td>
#> <td>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Placebo</td>
#> <td class='lastrow'>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Sex</span></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Male</td>
#> <td>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Female</td>
#> <td class='lastrow'>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Age<span class='varunits'> (years)</span></span></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>29.0 (11.6)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Median [Min, Max]</td>
#> <td>28.6 [10.3, 50.0]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Missing</td>
#> <td class='lastrow'>1 (2.5%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Weight<span class='varunits'> (kg)</span></span></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Mean (SD)</td>
#> <td>72.3 (14.7)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Median [Min, Max]</td>
#> <td class='lastrow'>68.3 [53.9, 109]</td>
#> </tr>
#> </tbody>
#> </table>
# Something more complicated
dat$dose <- ifelse(dat$treat=="Placebo", "Placebo",
sample(c("5 mg", "10 mg"), nrow(dat), replace=TRUE))
dat$dose <- factor(dat$dose, levels=c("Placebo", "5 mg", "10 mg"))
strata <- c(split(dat, dat$dose),
list("All treated"=subset(dat, treat=="Treated")),
list(Overall=dat))
labels <- list(
variables=list(sex=render.varlabel(dat$sex),
age=render.varlabel(dat$age),
wt=render.varlabel(dat$wt)),
groups=list("", "Treated", ""))
my.render.cont <- function(x) {
with(stats.default(x),
sprintf("%0.2f (%0.1f)", MEAN, SD))
}
table1(strata, labels, groupspan=c(1, 3, 1), render.continuous=my.render.cont)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class="grouplabel"></th>
#> <th colspan="1" class="grouplabel"></th>
#> <th colspan="3" class="grouplabel"><div>Treated</div></th>
#> <th colspan="1" class="grouplabel"></th>
#> </tr>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>5 mg<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>10 mg<br/><span class='stratn'>(N=10)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>All treated<br/><span class='stratn'>(N=20)</span></span></th>
#> <th class='firstrow lastrow'><span class='stratlabel'>Overall<br/><span class='stratn'>(N=40)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Sex</span></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> <td class='firstrow'></td>
#> </tr>
#> <tr>
#> <td class='rowlabel'>Male</td>
#> <td>10 (50.0%)</td>
#> <td>5 (50.0%)</td>
#> <td>5 (50.0%)</td>
#> <td>10 (50.0%)</td>
#> <td>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Female</td>
#> <td class='lastrow'>10 (50.0%)</td>
#> <td class='lastrow'>5 (50.0%)</td>
#> <td class='lastrow'>5 (50.0%)</td>
#> <td class='lastrow'>10 (50.0%)</td>
#> <td class='lastrow'>20 (50.0%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow'><span class='varlabel'>Age<span class='varunits'> (years)</span></span></td>
#> <td class='firstrow'>31.34 (11.1)</td>
#> <td class='firstrow'>28.17 (12.7)</td>
#> <td class='firstrow'>25.09 (11.9)</td>
#> <td class='firstrow'>26.55 (12.0)</td>
#> <td class='firstrow'>29.01 (11.6)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel lastrow'>Missing</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>1 (10.0%)</td>
#> <td class='lastrow'>0 (0%)</td>
#> <td class='lastrow'>1 (5.0%)</td>
#> <td class='lastrow'>1 (2.5%)</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow lastrow'><span class='varlabel'>Weight<span class='varunits'> (kg)</span></span></td>
#> <td class='firstrow lastrow'>73.14 (16.8)</td>
#> <td class='firstrow lastrow'>69.55 (9.9)</td>
#> <td class='firstrow lastrow'>73.18 (15.1)</td>
#> <td class='firstrow lastrow'>71.36 (12.5)</td>
#> <td class='firstrow lastrow'>72.25 (14.7)</td>
#> </tr>
#> </tbody>
#> </table>
# Transposed table
table1(~ age + wt | treat, data=dat, transpose=TRUE)
#> <table class="Rtable1">
#> <thead>
#> <tr>
#> <th class='rowlabel firstrow lastrow'></th>
#> <th class='firstrow lastrow'><span class='varlabel'>Age<br/><span class='varunits'>(years)</span></span></th>
#> <th class='firstrow lastrow'><span class='varlabel'>Weight<br/><span class='varunits'>(kg)</span></span></th>
#> </tr>
#> </thead>
#> <tbody>
#> <tr>
#> <td class='rowlabel firstrow lastrow'><span class='stratlabel'>Treated<br/><span class='stratn'>(N=20)</span></span></td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 26.5 (12.0)<br/>Median [Min, Max]: 24.2 [10.3, 44.3]<br/>Missing: 1 (5.0%)</td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 71.4 (12.5)<br/>Median [Min, Max]: 68.9 [56.2, 107]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow lastrow'><span class='stratlabel'>Placebo<br/><span class='stratn'>(N=20)</span></span></td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 31.3 (11.1)<br/>Median [Min, Max]: 30.4 [11.4, 50.0]<br/>Missing: 0 (0%)</td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 73.1 (16.8)<br/>Median [Min, Max]: 67.8 [53.9, 109]</td>
#> </tr>
#> <tr>
#> <td class='rowlabel firstrow lastrow'><span class='stratlabel'>Overall<br/><span class='stratn'>(N=40)</span></span></td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 29.0 (11.6)<br/>Median [Min, Max]: 28.6 [10.3, 50.0]<br/>Missing: 1 (2.5%)</td>
#> <td class='firstrow lastrow'><br/>Mean (SD): 72.3 (14.7)<br/>Median [Min, Max]: 68.3 [53.9, 109]</td>
#> </tr>
#> </tbody>
#> </table>