Criteria functions (and constructors thereof) for trimming and pruning tables.
Usage
all_zero_or_na(tr)
all_zero(tr)
content_all_zeros_nas(tt, criteria = all_zero_or_na)
prune_empty_level(tt)
prune_zeros_only(tt)
low_obs_pruner(min, type = c("sum", "mean"))Arguments
- tr
(
TableRowor related class)
aTableRowobject representing a single row within a populated table.- tt
(
TableTreeor related class)
aTableTreeobject representing a populated table.- criteria
(
function)
function which takes aTableRowobject and returnsTRUEif that row should be removed. Defaults toall_zero_or_na().- min
(
numeric(1))
(used bylow_obs_pruneronly). Minimum aggregate count value. Subtables whose combined/average count are below this threshold will be pruned.- type
(
string)
how count values should be aggregated. Must be"sum"(the default) or"mean".
Value
A logical value indicating whether tr should be included (TRUE) or pruned (FALSE) during pruning.
Details
all_zero_or_na returns TRUE (and thus indicates trimming/pruning) for any non-LabelRow
TableRow which contain only any mix of NA (including NaN), 0, Inf and -Inf values.
all_zero returns TRUE for any non-LabelRow which contains only (non-missing) zero values.
content_all_zeros_nas prunes a subtable if both of the following are true:
It has a content table with exactly one row in it.
all_zero_or_nareturnsTRUEfor that single content row. In practice, when the default summary/content function is used, this represents pruning any subtable which corresponds to an empty set of the input data (e.g. because a factor variable was used insplit_rows_by()but not all levels were present in the data).
prune_empty_level combines all_zero_or_na behavior for TableRow objects, content_all_zeros_nas on
content_table(tt) for TableTree objects, and an additional check that returns TRUE if the tt has no
children.
prune_zeros_only behaves as prune_empty_level does, except that like all_zero it prunes
only in the case of all non-missing zero values.
low_obs_pruner is a constructor function which, when called, returns a pruning criteria function which
will prune on content rows by comparing sum or mean (dictated by type) of the count portions of the cell
values (defined as the first value per cell regardless of how many values per cell there are) against min.
Examples
adsl <- ex_adsl
levels(adsl$SEX) <- c(levels(ex_adsl$SEX), "OTHER")
adsl$AGE[adsl$SEX == "UNDIFFERENTIATED"] <- 0
adsl$BMRKR1 <- 0
tbl_to_prune <- basic_table() %>%
analyze("BMRKR1") %>%
split_cols_by("ARM") %>%
split_rows_by("SEX") %>%
summarize_row_groups() %>%
split_rows_by("STRATA1") %>%
summarize_row_groups() %>%
analyze("AGE") %>%
build_table(adsl)
tbl_to_prune %>% prune_table(all_zero_or_na)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> A 21 (15.7%) 24 (17.9%) 18 (13.6%)
#> Mean 31.14 32.08 34.22
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78
#> M 51 (38.1%) 55 (41.0%) 60 (45.5%)
#> A 16 (11.9%) 19 (14.2%) 20 (15.2%)
#> Mean 35.62 39.37 33.55
#> B 21 (15.7%) 17 (12.7%) 21 (15.9%)
#> Mean 35.33 37.12 36.05
#> C 14 (10.4%) 19 (14.2%) 19 (14.4%)
#> Mean 35.86 35.79 36.58
#> U 3 (2.2%) 2 (1.5%) 4 (3.0%)
#> A 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 33.00 27.00 38.00
#> B 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 28.00 35.00 37.00
#> C 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> Mean 34.00 NA 33.00
tbl_to_prune %>% prune_table(all_zero)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————————————
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> A 21 (15.7%) 24 (17.9%) 18 (13.6%)
#> Mean 31.14 32.08 34.22
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78
#> M 51 (38.1%) 55 (41.0%) 60 (45.5%)
#> A 16 (11.9%) 19 (14.2%) 20 (15.2%)
#> Mean 35.62 39.37 33.55
#> B 21 (15.7%) 17 (12.7%) 21 (15.9%)
#> Mean 35.33 37.12 36.05
#> C 14 (10.4%) 19 (14.2%) 19 (14.4%)
#> Mean 35.86 35.79 36.58
#> U 3 (2.2%) 2 (1.5%) 4 (3.0%)
#> A 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 33.00 27.00 38.00
#> B 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 28.00 35.00 37.00
#> C 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> Mean 34.00 NA 33.00
#> UNDIFFERENTIATED 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> A 0 (0.0%) 0 (0.0%) 1 (0.8%)
#> Mean NA NA 0.00
#> B 0 (0.0%) 0 (0.0%) 0 (0.0%)
#> Mean NA NA NA
#> C 1 (0.7%) 0 (0.0%) 1 (0.8%)
#> Mean 0.00 NA 0.00
#> OTHER 0 (0.0%) 0 (0.0%) 0 (0.0%)
#> A 0 (0.0%) 0 (0.0%) 0 (0.0%)
#> Mean NA NA NA
#> B 0 (0.0%) 0 (0.0%) 0 (0.0%)
#> Mean NA NA NA
#> C 0 (0.0%) 0 (0.0%) 0 (0.0%)
#> Mean NA NA NA
tbl_to_prune %>% prune_table(content_all_zeros_nas)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————————————
#> Mean 0.00 0.00 0.00
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> A 21 (15.7%) 24 (17.9%) 18 (13.6%)
#> Mean 31.14 32.08 34.22
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78
#> M 51 (38.1%) 55 (41.0%) 60 (45.5%)
#> A 16 (11.9%) 19 (14.2%) 20 (15.2%)
#> Mean 35.62 39.37 33.55
#> B 21 (15.7%) 17 (12.7%) 21 (15.9%)
#> Mean 35.33 37.12 36.05
#> C 14 (10.4%) 19 (14.2%) 19 (14.4%)
#> Mean 35.86 35.79 36.58
#> U 3 (2.2%) 2 (1.5%) 4 (3.0%)
#> A 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 33.00 27.00 38.00
#> B 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 28.00 35.00 37.00
#> C 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> Mean 34.00 NA 33.00
#> UNDIFFERENTIATED 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> A 0 (0.0%) 0 (0.0%) 1 (0.8%)
#> Mean NA NA 0.00
#> C 1 (0.7%) 0 (0.0%) 1 (0.8%)
#> Mean 0.00 NA 0.00
tbl_to_prune %>% prune_table(prune_empty_level)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> A 21 (15.7%) 24 (17.9%) 18 (13.6%)
#> Mean 31.14 32.08 34.22
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78
#> M 51 (38.1%) 55 (41.0%) 60 (45.5%)
#> A 16 (11.9%) 19 (14.2%) 20 (15.2%)
#> Mean 35.62 39.37 33.55
#> B 21 (15.7%) 17 (12.7%) 21 (15.9%)
#> Mean 35.33 37.12 36.05
#> C 14 (10.4%) 19 (14.2%) 19 (14.4%)
#> Mean 35.86 35.79 36.58
#> U 3 (2.2%) 2 (1.5%) 4 (3.0%)
#> A 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 33.00 27.00 38.00
#> B 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 28.00 35.00 37.00
#> C 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> Mean 34.00 NA 33.00
tbl_to_prune %>% prune_table(prune_zeros_only)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————————————
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> A 21 (15.7%) 24 (17.9%) 18 (13.6%)
#> Mean 31.14 32.08 34.22
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78
#> M 51 (38.1%) 55 (41.0%) 60 (45.5%)
#> A 16 (11.9%) 19 (14.2%) 20 (15.2%)
#> Mean 35.62 39.37 33.55
#> B 21 (15.7%) 17 (12.7%) 21 (15.9%)
#> Mean 35.33 37.12 36.05
#> C 14 (10.4%) 19 (14.2%) 19 (14.4%)
#> Mean 35.86 35.79 36.58
#> U 3 (2.2%) 2 (1.5%) 4 (3.0%)
#> A 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 33.00 27.00 38.00
#> B 1 (0.7%) 1 (0.7%) 1 (0.8%)
#> Mean 28.00 35.00 37.00
#> C 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> Mean 34.00 NA 33.00
#> UNDIFFERENTIATED 1 (0.7%) 0 (0.0%) 2 (1.5%)
#> A 0 (0.0%) 0 (0.0%) 1 (0.8%)
#> Mean NA NA 0.00
#> C 1 (0.7%) 0 (0.0%) 1 (0.8%)
#> Mean 0.00 NA 0.00
min_prune <- low_obs_pruner(70, "sum")
tbl_to_prune %>% prune_table(min_prune)
#> A: Drug X B: Placebo C: Combination
#> ———————————————————————————————————————————————————
#> Mean 0.00 0.00 0.00
#> F 79 (59.0%) 77 (57.5%) 66 (50.0%)
#> B 25 (18.7%) 27 (20.1%) 21 (15.9%)
#> Mean 32.84 35.33 36.57
#> C 33 (24.6%) 26 (19.4%) 27 (20.5%)
#> Mean 33.73 34.73 34.78