# Program Name: tsiex04.R# Prep Environmentlibrary(envsetup)library(tern)library(dplyr)library(rtables)library(junco)# Define script level parameters:# - Define output ID and file locationtblid <-"TSIEX04"fileid <- tblidtab_titles <-get_titles_from_file(input_path ='../../_data/', tblid)string_map <- default_str_maptrtvar <-"TRT01A"popfl <-"SAFFL"catlevels <-c("1 to <10", "10 to <20", ">=20")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))# If AVISIT is not present in ADEXSUM than create 'Overall' as the Visit, which is used# for the filtering AVISIT records if it does existadexsum <- pharmaverseadamjnj::adexsum %>%mutate(VISIT =if (exists("AVISIT")) AVISIT else"Overall") %>%filter(PARAMCD =="NUMCYC"&!is.na(AVAL) & VISIT =="Overall") %>%select(USUBJID, PARAMCD, AVAL, AVALCAT1, starts_with("CRIT"))adsl$colspan_trt <-factor(ifelse(adsl[[trtvar]] =="Placebo", " ", "Active Study Agent"),levels =c("Active Study Agent", " "))# join data togetherex <- adexsum %>%inner_join(., adsl, by =c("USUBJID"))# Keep only columns with some data in which will remove any unwanted CRITy variablesex <- ex[, colSums(is.na(ex)) <nrow(ex)]# Work out how many CRITy vars we have leftexcritvars <- ex %>%select(num_range("CRIT", 1:99))countcritvars <-length(names(excritvars))# Drop unwanted levels for all CRITy variables you have remaining in ex and also for AVALCAT1critlbls <-list()for (i in1:countcritvars) { variable_name <-paste0("CRIT", i) ex[[variable_name]] <-droplevels(ex[[variable_name]]) critlbls[[i]] <-unique(as.character(ex[[variable_name]]))}ex$AVALCAT1 <-droplevels(ex$AVALCAT1)ex$AVALCAT1 <-factor(ex$AVALCAT1, levels = catlevels)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)ref_path <-c("colspan_trt", " ", trtvar, "Placebo")# Define layout and build table: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 %>%analyze("STUDYID",var_labels ="Total number of cycles received",afun = a_freq_j,extra_args =list(label ="N", .stats ="n_df"),indent_mod =0L,show_labels ="visible" ) %>%analyze("AVAL", show_labels ="hidden", indent_mod =2L, afun =function(x) {list("Mean (SD)"=rcell(c(mean(x), sd(x)),format =jjcsformat_xx("xx.x (xx.xx)") ),"Median"=rcell(median(x), format =jjcsformat_xx("xx.x")),"Min, max"=rcell(c(min(x), max(x)), format =jjcsformat_xx("xx., xx.")) ) }) %>%analyze("AVALCAT1",nested =FALSE,var_labels ="Total number of cycles received, n (%)",afun = a_freq_j,extra_args =list(denom ="n_df", .stats =c("count_unique_fraction")),indent_mod =1L,show_labels ="visible" ) %>%analyze("CRIT1FL",var_labels ="Total number of cycles received~[super a], n (%)",afun = a_freq_j,extra_args =list(val ="Y",label = critlbls[[1]],denom ="n_df",.stats =c("count_unique_fraction") ),indent_mod =1L,show_labels ="visible",nested =FALSE )# Add in analzye for all remaining CRIT variables contained in exfor (i in2:countcritvars) { lyt <- lyt %>%analyze(paste0("CRIT", i, "FL"),afun = a_freq_j,extra_args =list(val ="Y",label = critlbls[[i]],denom ="n_df",.stats =c("count_unique_fraction") ),indent_mod =2L,show_labels ="hidden" )}lyt <- lyt %>%append_topleft("Parameter")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")
TSIEX04:Number of Cycles Received; Safety Analysis Set (Study jjcs - core)
Active Study Agent
Xanomeline High Dose
Xanomeline Low Dose
Combined
Placebo
Parameter
N=53
N=73
N=126
N=59
Total number of cycles received
N
53
73
126
59
Mean (SD)
12.1 (7.40)
12.9 (6.50)
12.5 (6.88)
12.0 (7.44)
Median
12.0
13.0
13.0
12.0
Min, max
0, 24
0, 24
0, 24
0, 24
Total number of cycles received, n (%)
1 to <10
19 (37.3%)
21 (29.6%)
40 (32.8%)
24 (42.1%)
10 to <20
21 (41.2%)
35 (49.3%)
56 (45.9%)
21 (36.8%)
≥20
11 (21.6%)
15 (21.1%)
26 (21.3%)
12 (21.1%)
Total number of cycles receiveda, n (%)
≥1
51 (96.2%)
71 (97.3%)
122 (96.8%)
57 (96.6%)
≥2
49 (92.5%)
69 (94.5%)
118 (93.7%)
56 (94.9%)
≥3
46 (86.8%)
69 (94.5%)
115 (91.3%)
54 (91.5%)
≥5
43 (81.1%)
66 (90.4%)
109 (86.5%)
48 (81.4%)
≥10
32 (60.4%)
50 (68.5%)
82 (65.1%)
33 (55.9%)
a Subjects are summarized in all applicable cycle categories.