# Program Name: tsiex09.R# Prep Environmentlibrary(envsetup)library(tern)library(dplyr)library(rtables)library(junco)# Define script level parameters:# - Define output ID and file locationtblid <-"TSIEX09"fileid <- tblidtab_titles <-get_titles_from_file(input_path ='../../_data/', tblid)string_map <- default_str_maptrtvar <-"TRT01A"popfl <-"SAFFL"combined_colspan_trt <-TRUEif (combined_colspan_trt ==TRUE) {# Set up levels and label for the required combined columns add_combo <-add_combo_facet("Combined",label ="Combined",levels =c("Xanomeline High Dose", "Xanomeline Low Dose") )# choose if any facets need to be removed - e.g remove the combined column for placebo rm_combo_from_placebo <-cond_rm_facets(facets ="Combined",ancestor_pos =NA,value =" ",split ="colspan_trt" ) mysplit <-make_split_fun(post =list(add_combo, rm_combo_from_placebo))}# Process Data:# Read in required dataadsl <- pharmaverseadamjnj::adsl %>%filter(!!rlang::sym(popfl) =="Y") %>%select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl))adex <- pharmaverseadamjnj::adex %>%select(USUBJID, ATRT, EXLOT)adsl$colspan_trt <-factor(ifelse(adsl[[trtvar]] =="Placebo", " ", "Active Study Agent"),levels =c("Active Study Agent", " "))# join data togetherex <- adex %>%inner_join(., adsl, by =c("USUBJID")) %>%mutate(ATRT = stringr::str_to_sentence(ATRT)) %>%mutate(trttxt =paste0(ATRT, " lots"))ex$trttxt2 <-factor(ex$trttxt)# Puts placebo last - this line can be removed if you do not have a placebo treatment armex$trttxt2 <- forcats::fct_relevel(ex$trttxt2, "Placebo lots", after =Inf)colspan_trt_map <-create_colspan_map( adsl,non_active_grp ="Placebo",non_active_grp_span_lbl =" ",active_grp_span_lbl ="Active Study Agent",colspan_var ="colspan_trt",trt_var = trtvar)# Define layout and build table:extra_args1 <-list(.stats ="count_unique_fraction",denom ="n_parentdf",# trick to get 0 for Placebo column for non Placebo lotsdenom_by ="STUDYID")lyt <- rtables::basic_table(top_level_section_div =" ",show_colcounts =TRUE,colcount_format ="N=xx") %>%split_cols_by("colspan_trt",split_fun =trim_levels_to_map(map = colspan_trt_map) )if (combined_colspan_trt ==TRUE) { lyt <- lyt %>%split_cols_by(trtvar, split_fun = mysplit)} else { lyt <- lyt %>%split_cols_by(trtvar)}lyt <- lyt %>%# trick to get 0 for Placebo column for non Placebo lots# we do not want to show this split_rows group label - therefor set child_labels to hiddensplit_rows_by("STUDYID", child_labels ="hidden") %>%split_rows_by("trttxt2",split_label ="Study Treatment",split_fun =trim_levels_in_group("STUDYID"),label_pos ="topleft",indent_mod =0L,section_div =c(" ") ) %>%analyze("EXLOT",afun = a_freq_j,extra_args = extra_args1,indent_mod =0L,show_labels ="hidden" ) %>%append_topleft(" Lot, n (%)")result <-build_table(lyt, ex, alt_counts_df = adsl)# Add titles and footnotes:result <-set_titles(result, tab_titles)# Convert to tbl file and output tablett_to_tlgrtf(string_map = string_map, tt = result, file = fileid, orientation ="portrait")
TSIEX09:Distribution of Subjects by Study Treatment Lot; Safety Analysis Set (Study jjcs - core)
Active Study Agent
Study Treatment
Xanomeline High Dose
Xanomeline Low Dose
Combined
Placebo
Lot, n (%)
N=53
N=73
N=126
N=59
Xanomeline lots
XXX-YYY-ZZZ-002
30 (56.6%)
31 (42.5%)
61 (48.4%)
0
XXX-YYY-ZZZ-003
26 (49.1%)
28 (38.4%)
54 (42.9%)
0
XXX-YYY-ZZZ-004
20 (37.7%)
38 (52.1%)
58 (46.0%)
0
XXX-YYY-ZZZ-005
25 (47.2%)
29 (39.7%)
54 (42.9%)
0
Placebo lots
XXX-YYY-ZZZ-002
0
0
0
32 (54.2%)
XXX-YYY-ZZZ-003
0
0
0
28 (47.5%)
XXX-YYY-ZZZ-004
0
0
0
33 (55.9%)
XXX-YYY-ZZZ-005
0
0
0
32 (54.2%)
Note: Subjects may be counted in multiple lots, if applicable.