Code
# Define the split function
split_fun <- drop_split_levels
afun <- function(x, .var, .spl_context, ...) {
n_fun <- sum(!is.na(x), na.rm = TRUE)
if (n_fun == 0) {
mean_sd_fun <- c(NA, NA)
median_fun <- NA
min_max_fun <- c(NA, NA)
} else {
mean_sd_fun <- c(mean(x, na.rm = TRUE), sd(x, na.rm = TRUE))
median_fun <- median(x, na.rm = TRUE)
min_max_fun <- c(min(x), max(x))
}
is_chg <- .var == "CHG"
is_baseline <- .spl_context$value[which(.spl_context$split == "AVISIT")] == "BASELINE"
if (is_baseline && is_chg) n_fun <- mean_sd_fun <- median_fun <- min_max_fun <- NULL
in_rows(
"n" = n_fun,
"Mean (SD)" = mean_sd_fun,
"Median" = median_fun,
"Min - Max" = min_max_fun,
.formats = list("n" = "xx", "Mean (SD)" = "xx.xx (xx.xx)", "Median" = "xx.xx", "Min - Max" = "xx.xx - xx.xx"),
.format_na_strs = list("n" = "NE", "Mean (SD)" = "NE (NE)", "Median" = "NE", "Min - Max" = "NE - NE")
)
}
lyt <- basic_table(show_colcounts = TRUE) %>%
split_cols_by("ACTARM") %>%
split_rows_by("PARAM", split_fun = split_fun, label_pos = "topleft", split_label = obj_label(adlb_f$PARAM)) %>%
split_rows_by("AVISIT", split_fun = split_fun, label_pos = "topleft", split_label = obj_label(adlb_f$AVISIT)) %>%
split_cols_by_multivar(
vars = c("AVAL", "CHG"),
varlabels = c("Value at Visit", "Change from\nBaseline")
) %>%
analyze_colvars(afun = afun)
result <- build_table(lyt, adlb_f)
result
A: Drug X B: Placebo C: Combination
Change from Change from Change from
Parameter Value at Visit Baseline Value at Visit Baseline Value at Visit Baseline
Analysis Visit (N=804) (N=804) (N=670) (N=670) (N=792) (N=792)
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Alanine Aminotransferase Measurement
BASELINE
n 134 134 132
Mean (SD) 17.74 (9.93) 18.71 (9.83) 19.46 (9.08)
Median 17.46 18.19 18.97
Min - Max 0.00 - 44.06 1.48 - 54.40 0.57 - 39.81
WEEK 1 DAY 8
n 134 134 0 0 132 132
Mean (SD) 16.75 (9.08) -0.99 (13.49) NE (NE) NE (NE) 19.61 (9.27) 0.14 (12.85)
Median 16.02 -1.28 NE NE 19.00 0.06
Min - Max 0.05 - 36.30 -31.31 - 27.89 NE - NE NE - NE 0.91 - 44.75 -32.45 - 38.85
WEEK 2 DAY 15
n 134 134 134 134 132 132
Mean (SD) 17.82 (9.60) 0.08 (14.15) 18.82 (9.73) 0.11 (14.45) 16.55 (8.15) -2.92 (12.64)
Median 15.92 0.28 17.96 -0.93 17.02 -1.11
Min - Max 0.40 - 44.33 -32.89 - 40.55 0.18 - 44.34 -45.93 - 29.85 0.35 - 34.69 -28.36 - 23.98
WEEK 3 DAY 22
n 134 134 134 134 132 132
Mean (SD) 18.37 (9.30) 0.63 (13.85) 17.65 (9.58) -1.06 (13.58) 16.75 (9.54) -2.71 (13.22)
Median 18.11 1.13 17.68 -0.49 15.10 -2.66
Min - Max 0.59 - 41.73 -40.09 - 31.24 0.02 - 38.61 -46.30 - 31.38 0.48 - 39.23 -30.63 - 26.51
WEEK 4 DAY 29
n 134 134 134 134 132 132
Mean (SD) 19.17 (10.95) 1.44 (15.39) 17.22 (10.64) -1.48 (15.20) 17.92 (9.32) -1.54 (12.63)
Median 17.41 0.88 15.88 -2.96 17.71 -1.53
Min - Max 0.93 - 54.24 -32.93 - 46.98 0.39 - 47.96 -41.45 - 43.08 0.25 - 41.27 -30.33 - 27.99
WEEK 5 DAY 36
n 134 134 134 134 132 132
Mean (SD) 19.22 (9.47) 1.48 (14.49) 18.01 (9.92) -0.69 (14.65) 18.51 (9.43) -0.95 (12.92)
Median 19.80 2.31 18.28 1.82 19.26 -2.48
Min - Max 0.01 - 43.42 -40.08 - 30.07 0.11 - 40.64 -47.60 - 26.04 0.02 - 37.46 -29.78 - 25.00