if (FALSE) {
library(data.table)
library(flextable)
# data simulation ----
USUBJID <- sprintf("01-ABC-%04.0f", 1:200)
VISITS <- c("SCREENING 1", "WEEK 2", "MONTH 3")
LBTEST <- c("Albumin", "Sodium")
VISITNUM <- seq_along(VISITS)
LBBLFL <- rep(NA_character_, length(VISITNUM))
LBBLFL[1] <- "Y"
VISIT <- data.frame(VISIT = VISITS, VISITNUM = VISITNUM,
LBBLFL = LBBLFL, stringsAsFactors = FALSE)
labdata <- expand.grid(USUBJID = USUBJID, LBTEST = LBTEST,
VISITNUM = VISITNUM,
stringsAsFactors = FALSE)
setDT(labdata)
labdata <- merge(labdata, VISIT, by = "VISITNUM")
subject_elts <- unique(labdata[, .SD, .SDcols = "USUBJID"])
subject_elts <- unique(subject_elts)
subject_elts[, c("TREAT") := list(
sample(x = c("Treatment", "Placebo"), size = .N, replace = TRUE))]
subject_elts[, c("TREAT"):= list(
factor(.SD$TREAT, levels = c("Treatment", "Placebo")))]
setDF(subject_elts)
labdata <- merge(labdata, subject_elts,
by = "USUBJID", all.x = TRUE, all.y = FALSE)
labdata[, c("LBNRIND"):= list(
sample(x = c("LOW", "NORMAL", "HIGH"), size = .N,
replace = TRUE, prob = c(.03, .9, .07)))]
setDF(labdata)
# shift table calculation ----
SHIFT_TABLE <- shift_table(
x = labdata, cn_visit = "VISIT",
cn_grade = "LBNRIND",
cn_usubjid = "USUBJID",
cn_lab_cat = "LBTEST",
cn_treatment = "TREAT",
cn_is_baseline = "LBBLFL",
baseline_identifier = "Y",
grade_levels = c("LOW", "NORMAL", "HIGH"))
# get attrs for post treatment ----
SHIFT_TABLE_VISIT <- attr(SHIFT_TABLE, "VISIT_N")
visit_as_factor <- attr(SHIFT_TABLE, "FUN_VISIT")
range_as_factor <- attr(SHIFT_TABLE, "FUN_GRADE")
# post treatments ----
SHIFT_TABLE$VISIT = visit_as_factor(SHIFT_TABLE$VISIT)
SHIFT_TABLE$BASELINE = range_as_factor(SHIFT_TABLE$BASELINE)
SHIFT_TABLE$LBNRIND = range_as_factor(SHIFT_TABLE$LBNRIND)
SHIFT_TABLE_VISIT$VISIT = visit_as_factor(SHIFT_TABLE_VISIT$VISIT)
# tabulator ----
my_format <- function(z) {
formatC(z * 100, digits = 1, format = "f",
flag = "0", width = 4)
}
tab <- tabulator(
x = SHIFT_TABLE,
hidden_data = SHIFT_TABLE_VISIT,
row_compose = list(
VISIT = as_paragraph(VISIT, "\n(N=", N_VISIT, ")")
),
rows = c("LBTEST", "VISIT", "BASELINE"),
columns = c("TREAT", "LBNRIND"),
`n` = as_paragraph(N),
`%` = as_paragraph(as_chunk(PCT, formatter = my_format))
)
# as_flextable ----
ft_1 <- as_flextable(
x = tab, separate_with = "VISIT",
label_rows = c(LBTEST = "Lab Test", VISIT = "Visit",
BASELINE = "Reference Range Indicator"))
ft_1
}
Run the code above in your browser using DataLab