Add rows according to levels of a variable
split_rows_by(
lyt,
var,
labels_var = var,
split_label = var,
split_fun = NULL,
format = NULL,
na_str = NA_character_,
nested = TRUE,
child_labels = c("default", "visible", "hidden"),
label_pos = "hidden",
indent_mod = 0L,
page_by = FALSE,
page_prefix = split_label,
section_div = NA_character_
)
A PreDataTableLayouts
object suitable for passing to further layouting functions, and to build_table()
.
(PreDataTableLayouts
)
layout object pre-data used for tabulation.
(string
)
variable name.
(string
)
name of variable containing labels to be displayed for the values of var
.
(string
)
label to be associated with the table generated by the split. Not to be confused
with labels assigned to each child (which are based on the data and type of split during tabulation).
(function
or NULL
)
custom splitting function. See custom_split_funs.
(string
, function
, or list
)
format associated with this split. Formats can be declared via
strings ("xx.x"
) or function. In cases such as analyze
calls, they can be character vectors or lists of
functions. See formatters::list_valid_format_labels()
for a list of all available format strings.
(string
)
string that should be displayed when the value of x
is missing. Defaults to "NA"
.
(logical
)
whether this layout instruction should be applied within the existing layout structure
if possible (TRUE
, the default) or as a new top-level element (FALSE
). Ignored if it would nest a split
underneath analyses, which is not allowed.
(string
)
the display behavior for the labels (i.e. label rows) of the children of this
split. Accepts "default"
, "visible"
, and "hidden"
. Defaults to "default"
which flags the label row as
visible only if the child has 0 content rows.
(string
)
location where the variable label should be displayed. Accepts "hidden"
(default for non-analyze row splits), "visible"
, "topleft"
, and "default"
(for analyze splits only). For
analyze
calls, "default"
indicates that the variable should be visible if and only if multiple variables are
analyzed at the same level of nesting.
(numeric
)
modifier for the default indent position for the structure created by this
function (subtable, content table, or row) and all of that structure's children. Defaults to 0, which
corresponds to the unmodified default behavior.
(flag
)
whether pagination should be forced between different children resulting from this
split. An error will occur if the selected split does not contain at least one value that is not NA
.
(string
)
prefix to be appended with the split value when forcing pagination between
the children of a split/table.
(string
)
string which should be repeated as a section divider after each group defined
by this split instruction, or NA_character_
(the default) for no section divider.
User-defined custom split functions can perform any type of computation on the incoming data provided that they meet the requirements for generating "splits" of the incoming data based on the split object.
Split functions are functions that accept:
a data.frame
of incoming data to be split.
a Split object. This is largely an internal detail custom functions will not need to worry about,
but obj_name(spl)
, for example, will give the name of the split as it will appear in paths in the resulting
table.
any pre-calculated values. If given non-NULL
values, the values returned should match these.
Should be NULL
in most cases and can usually be ignored.
any pre-calculated value labels. Same as above for values
.
if TRUE
, resulting splits that are empty are removed.
a data.frame
describing previously performed splits which collectively
arrived at df
.
The function must then output a named list
with the following elements:
the vector of all values corresponding to the splits of df
.
a list of data.frame
s representing the groupings of the actual observations from df
.
a character vector giving a string label for each value listed in the values
element above.
if present, extra arguments are to be passed to summary and analysis functions
whenever they are executed on the corresponding element of datasplit
or a subset thereof.
One way to generate custom splitting functions is to wrap existing split functions and modify either the incoming data before they are called or their outputs.
Gabriel Becker
lyt <- basic_table() %>%
split_cols_by("ARM") %>%
split_rows_by("RACE", split_fun = drop_split_levels) %>%
analyze("AGE", mean, var_labels = "Age", format = "xx.xx")
tbl <- build_table(lyt, DM)
tbl
lyt2 <- basic_table() %>%
split_cols_by("ARM") %>%
split_rows_by("RACE") %>%
analyze("AGE", mean, var_labels = "Age", format = "xx.xx")
tbl2 <- build_table(lyt2, DM)
tbl2
lyt3 <- basic_table() %>%
split_cols_by("ARM") %>%
split_cols_by("SEX") %>%
summarize_row_groups(label_fstr = "Overall (N)") %>%
split_rows_by("RACE",
split_label = "Ethnicity", labels_var = "ethn_lab",
split_fun = drop_split_levels
) %>%
summarize_row_groups("RACE", label_fstr = "%s (n)") %>%
analyze("AGE", var_labels = "Age", afun = mean, format = "xx.xx")
lyt3
library(dplyr)
DM2 <- DM %>%
filter(SEX %in% c("M", "F")) %>%
mutate(
SEX = droplevels(SEX),
gender_lab = c(
"F" = "Female", "M" = "Male",
"U" = "Unknown",
"UNDIFFERENTIATED" = "Undifferentiated"
)[SEX],
ethn_lab = c(
"ASIAN" = "Asian",
"BLACK OR AFRICAN AMERICAN" = "Black or African American",
"WHITE" = "White",
"AMERICAN INDIAN OR ALASKA NATIVE" = "American Indian or Alaska Native",
"MULTIPLE" = "Multiple",
"NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER" =
"Native Hawaiian or Other Pacific Islander",
"OTHER" = "Other", "UNKNOWN" = "Unknown"
)[RACE]
)
tbl3 <- build_table(lyt3, DM2)
tbl3
Run the code above in your browser using DataLab