When we need rows to reflect different variables rather than different
levels of a single variable, we use split_rows_by_multivar.
split_rows_by_multivar(
lyt,
vars,
split_fun = NULL,
split_label = "",
varlabels = vars,
parent_name = "multivars",
format = NULL,
na_str = NA_character_,
nested = TRUE,
at_sibling = NULL,
child_labels = c("default", "visible", "hidden"),
indent_mod = 0L,
section_div = NA_character_,
extra_args = list()
)A PreDataTableLayouts object suitable for passing to further layouting functions, and to build_table().
(PreDataTableLayouts)
layout object pre-data used for tabulation.
(character)
vector of variable names.
(function or NULL)
custom splitting function. See custom_split_funs.
(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).
(character)
vector of labels for vars.
(character(1))
Name to assign to the table corresponding
to the split or group of sibling analyses, for split_rows_by* and
analyze* when analyzing more than one variable, respectively. Ignored when
analyzing a single variable.
(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.
(character(1) or NULL)
If non-null, a preceding
split or analyze to anchor this instruction to as a direct sibling. Cannot
select an instruction that is downstream of a point where a previously used
anchor (See Nesting Anchor Resolution for details).
(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.
(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.
(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.
(list)
extra arguments to be passed to the tabulation function. Element position in the list
corresponds to the children of this split. Named elements in the child-specific lists are ignored if they do
not match a formal argument of the tabulation function.
When nested is TRUE, at_sibling allows you to set a nesting
anchor that your new split_rows_by* or analyze* directive
should be placed as a sibling to. The lookup for this anchor
occurs only in the currently active top-level nesting stack,
meaning the directives that have occurred since
the last split or analysis with nested == FALSE.
Furthermore, resolution occurs against the first element of each
arm of a branching point caused by any previous uses of
at_sibling but only descends into the last arm.
So for example if our previous layout was generated via:
lyt <- basic_table() |>
split_rows_by("SEX") |>
analyze("AGE") |>
split_rows_by("BMRKR2", nested = FALSE) |>
split_rows_by("RACE") |>
analyze("AGE") |>
split_rows_by("SEX", at_sibling = "RACE") |>
analyze("BMRKR1")
The eligible anchor points would be "BMRKR2", "RACE", "SEX"
and "BMRKR1". "AGE" is masked by the branching caused by
anchoring our SEX split on RACE.
Finally, while at_sibling does support de-duplication of
"<name>[i]" anchors, it does so within the set of available
anchors, which can be counter-intuitive. It is strongly suggested
that the parent_name and table_names argument(s) of
split_rows_by* and analyze be used to prevent the need for
this. at_sibling will resolve to table names overridden in this
manner.
split_rows_by() for typical row splitting, and split_cols_by_multivar() to perform the same type of
split on a column basis.
lyt <- basic_table() |>
split_cols_by("ARM") |>
split_rows_by_multivar(c("SEX", "STRATA1")) |>
summarize_row_groups() |>
analyze(c("AGE", "SEX"))
tbl <- build_table(lyt, DM)
tbl
Run the code above in your browser using DataLab