# Program Name: tsicm04.R# Prep Environmentlibrary(envsetup)library(tern)library(dplyr)library(rtables)library(junco)# Define script level parameters:# - Define output ID and file locationtblid <-"TSICM04"fileid <- tblidtab_titles <-get_titles_from_file(input_path ='../../_data/', tblid)string_map <- default_str_maptrtvar <-"TRT01A"popfl <-"SAFFL"atcvar <-"CMLVL1"atclevel <-"1"include_top_row <-FALSEcombined_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:adsl <- pharmaverseadamjnj::adsl %>%filter(!!rlang::sym(popfl) =="Y") %>%select(USUBJID, all_of(trtvar), all_of(popfl))adcm <- pharmaverseadamjnj::adcm %>%filter(ONTRTFL =="Y") %>%select(USUBJID, ONTRTFL, all_of(atcvar), CMBASPRF)# Convert medications to sentence caseadcm[[atcvar]] <-as.factor(stringr::str_to_sentence(adcm[[atcvar]]))adcm$CMBASPRF <-as.factor(stringr::str_to_sentence(adcm$CMBASPRF))adsl$colspan_trt <-factor(ifelse(adsl[[trtvar]] =="Placebo", " ", "Active Study Agent"),levels =c("Active Study Agent", " "))# join data togethercm <- adcm %>%inner_join(., adsl, by =c("USUBJID"))if (length(adcm$ONTRTFL) ==0) { cm <- adcm %>%right_join(., adsl, by =c("USUBJID"))}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_args_1 <-list(.stats ="count_unique_fraction")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 %>%add_overall_col("Total")if (include_top_row ==TRUE) { lyt <- lyt %>%analyze("ONTRTFL",afun = a_freq_j,extra_args =append( extra_args_1,list(label ="Subjects with >=1 concomitant medication") ) )}lyt <- lyt %>%split_rows_by( atcvar,child_labels ="hidden",split_label =paste0("ATC Level ", atclevel),label_pos ="topleft",split_fun =trim_levels_in_group("CMBASPRF"),section_div =c(" "),indent_mod =0L ) %>%summarize_row_groups(atcvar, cfun = a_freq_j, extra_args = extra_args_1) %>%analyze("CMBASPRF", afun = a_freq_j, extra_args = (extra_args_1)) %>%append_topleft(" Base Preferred Term")result <-build_table(lyt, cm, alt_counts_df = adsl)# Post-Processing step to sort by descending count on total column:if (length(adcm$ONTRTFL) !=0) { result <-sort_at_path( result,c("root", atcvar),scorefun =jj_complex_scorefun(colpath ="Total") ) result <-sort_at_path( result,c("root", atcvar, "*", "CMBASPRF"),scorefun =jj_complex_scorefun(colpath ="Total") )################################################################################# Prune table to only keep those that meet x% criteria on the total column, but top row is not subject to pruning (if optionally displayed)################################################################################ result <-safe_prune_table( result,prune_func =bspt_pruner(fraction =0.05,keeprowtext ="Subjects with >=1 concomitant medication",cols =c("Total") ) )}# If optional top row is required but there is no data remove it row and display "No data to display" textif (length(adcm$ONTRTFL) ==0) { result <-safe_prune_table( result,prune_func =remove_rows(removerowtext ="Subjects with >=1 concomitant medication" ) )}# 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 ="landscape")
TSICM04:Concomitant Medications Received by =[xx]% of Subjects; Safety Analysis Set (Study jjcs - core)
Active Study Agent
ATC Level 1
Xanomeline High Dose
Xanomeline Low Dose
Combined
Placebo
Total
Base Preferred Term
N=53
N=73
N=126
N=59
N=185
Uncoded
34 (64.2%)
35 (47.9%)
69 (54.8%)
34 (57.6%)
103 (55.7%)
Uncoded: hydrocortisone, topical
11 (20.8%)
12 (16.4%)
23 (18.3%)
4 (6.8%)
27 (14.6%)
Uncoded: cortisone
8 (15.1%)
4 (5.5%)
12 (9.5%)
4 (6.8%)
16 (8.6%)
Uncoded: benadryl
7 (13.2%)
6 (8.2%)
13 (10.3%)
1 (1.7%)
14 (7.6%)
Systemic hormonal preparations, excl.
7 (13.2%)
9 (12.3%)
16 (12.7%)
1 (1.7%)
17 (9.2%)
Hydrocortisone
7 (13.2%)
9 (12.3%)
16 (12.7%)
1 (1.7%)
17 (9.2%)
Note: Concomitant medications are defined as any therapy used on or after the same day as the first dose of study treatment [up to last dose of study treatment +xx days}, including those that started before and continue on after the first dose of study treatment.