View source: R/colby_constructors.R
split_rows_by | R Documentation |
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_
)
lyt |
layout object pre-data used for tabulation |
var |
string, variable name |
labels_var |
string, name of variable containing labels to be displayed
for the values of |
split_label |
string. Label string 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). |
split_fun |
function/NULL. custom splitting function See
|
format |
|
na_str |
character(1). String that should be displayed when the value of |
nested |
boolean. Should this layout instruction be applied within the
existing layout structure if possible ( |
child_labels |
string. One of |
label_pos |
character(1). Location the variable label should be
displayed, Accepts |
indent_mod |
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. |
page_by |
logical(1). Should pagination be forced between different
children resulting form this split. An error will rise if the selected split
does not contain at least one value that is not |
page_prefix |
character(1). Prefix, to be appended with the split value, when forcing pagination between the children of this split/table |
section_div |
character(1). String which should be repeated as a section
divider after each group defined by this split instruction, or
|
A PreDataTableLayouts
object suitable for passing to further
layouting functions, and to build_table
.
User-defined custom split functions can perform any type of computation on the incoming data provided that they meet the contract for generating 'splits' of the incoming data 'based on' the split object.
Split functions are functions that accept:
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 likely be ignored
Any pre-calculated value labels. Same as above for
values
If TRUE
, resulting splits that are empty should be
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.frames 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.
If var
is a factor with empty unobserved levels and
labels_var
is specified, it must also be a factor
with the same number of levels as var
. Currently the
error that occurs when this is not the case is not very informative,
but that will change in the future.
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
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.