Skip to contents

Add combination levels to split

Usage

select_all_levels

add_combo_levels(combosdf, trim = FALSE, first = FALSE, keep_levels = NULL)

Format

An object of class AllLevelsSentinel of length 0.

Arguments

combosdf

(data.frame or tbl_df)
a data frame with columns valname, label, levelcombo, and exargs. levelcombo and exargs should be list columns. Passing the select_all_levels object as a value in comblevels column indicates that an overall/all-observations level should be created.

trim

(flag)
whether splits corresponding with 0 observations should be kept when tabulating.

first

(flag)
whether the created split level should be placed first in the levels (TRUE) or last (FALSE, the default).

keep_levels

(character or NULL)
if non-NULL, the levels to retain across both combination and individual levels.

Value

A closure suitable for use as a splitting function (splfun) when creating a table layout.

Note

Analysis or summary functions for which the order matters should never be used within the tabulation framework.

Examples

library(tibble)
combodf <- tribble(
  ~valname, ~label, ~levelcombo, ~exargs,
  "A_B", "Arms A+B", c("A: Drug X", "B: Placebo"), list(),
  "A_C", "Arms A+C", c("A: Drug X", "C: Combination"), list()
)

lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by("ARM", split_fun = add_combo_levels(combodf)) %>%
  analyze("AGE")

tbl <- build_table(lyt, DM)
tbl
#>        A: Drug X   B: Placebo   C: Combination   Arms A+B   Arms A+C
#>         (N=121)     (N=106)        (N=129)       (N=227)    (N=250) 
#> --------------------------------------------------------------------
#> Mean     34.91       33.02          34.57         34.03      34.73  

lyt1 <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by("ARM",
    split_fun = add_combo_levels(combodf,
      keep_levels = c(
        "A_B",
        "A_C"
      )
    )
  ) %>%
  analyze("AGE")

tbl1 <- build_table(lyt1, DM)
tbl1
#>        Arms A+B   Arms A+C
#>        (N=227)    (N=250) 
#> --------------------------
#> Mean    34.03      34.73  

smallerDM <- droplevels(subset(DM, SEX %in% c("M", "F") &
  grepl("^(A|B)", ARM)))
lyt2 <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by("ARM", split_fun = add_combo_levels(combodf[1, ])) %>%
  split_cols_by("SEX",
    split_fun = add_overall_level("SEX_ALL", "All Genders")
  ) %>%
  analyze("AGE")

lyt3 <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by("ARM", split_fun = add_combo_levels(combodf)) %>%
  split_rows_by("SEX",
    split_fun = add_overall_level("SEX_ALL", "All Genders")
  ) %>%
  summarize_row_groups() %>%
  analyze("AGE")

tbl3 <- build_table(lyt3, smallerDM)
tbl3
#>                A: Drug X      B: Placebo      Arms A+B       Arms A+C  
#>                 (N=121)        (N=106)        (N=227)        (N=121)   
#> -----------------------------------------------------------------------
#> All Genders   121 (100.0%)   106 (100.0%)   227 (100.0%)   121 (100.0%)
#>   Mean           34.91          33.02          34.03          34.91    
#> F              70 (57.9%)     56 (52.8%)    126 (55.5%)     70 (57.9%) 
#>   Mean           33.71          33.84          33.77          33.71    
#> M              51 (42.1%)     50 (47.2%)    101 (44.5%)     51 (42.1%) 
#>   Mean           36.55          32.10          34.35          36.55