## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set( echo = TRUE, collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE ) options(docx.add_datetime=FALSE) library(junco) library(rlistings) library(tibble) ## ----setup-title, include=FALSE----------------------------------------------- #Need to set up a dummy tittle and main footer titles <- list(title = " ", subtitles = NULL, main_footer = "Dummy Note: On-treatment is defined as ~{optional treatment-emergent}") #Need tempdir out_dir <- file.path("..", "output") if(!dir.exists(out_dir)) { dir.create(out_dir) } ## ----orientation_rtf---------------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A", show_colcounts = FALSE ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/exampleorientation"), orientation = "landscape") ## ----orientation_docx--------------------------------------------------------- export_as_docx_j(result, tblid = "exampleorientation", output_dir = out_dir, orientation = "landscape") ## ----orientation_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "exampleorientation", orientation = "landscape") ## ----fontsize_rtf------------------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A", show_colcounts = FALSE ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplefontsize"), fontspec = formatters::font_spec("Times", 8, 1.2)) ## ----fontsize_docx------------------------------------------------------------ export_as_docx_j(result, tblid = "examplefontsize", output_dir = out_dir, theme = theme_docx_default_j(font = "Times New Roman", font_size = 8L)) ## ----fontsize_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplefontsize", fontspec = formatters::font_spec("Times", 8, 1.2)) ## ----spanning_header_setup---------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), colspan_trt = factor(c("Active Study Agent", "Active Study Agent", "Active Study Agent", " ", "Active Study Agent", "Active Study Agent", "Active Study Agent", " "), levels = c( "Active Study Agent", " " ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") adsl 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 = "TRT01A") colspan_trt_map ## ----spanning_header_full----------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), colspan_trt = factor(c("Active Study Agent", "Active Study Agent", "Active Study Agent", " ", "Active Study Agent", "Active Study Agent", "Active Study Agent", " "), levels = c( "Active Study Agent", " " ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") # No combined column needed for spanning header example mysplit <- make_split_fun() 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 = "TRT01A") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> split_cols_by("colspan_trt", split_fun = trim_levels_to_map(map = colspan_trt_map) ) |> split_cols_by("TRT01A", show_colcounts = FALSE, split_fun = mysplit ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplespanningheader1"), orientation = "landscape") ## ----spanning_header_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplespanningheader1", orientation = "landscape") ## ----combined_column_setup---------------------------------------------------- add_combo <- add_combo_facet("Combined", label = "Combined", levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg") ) mysplit <- make_split_fun(post = list(add_combo)) ## ----combined_column_full----------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), colspan_trt = factor(c("Active Study Agent", "Active Study Agent", "Active Study Agent", " ", "Active Study Agent", "Active Study Agent", "Active Study Agent", " "), levels = c( "Active Study Agent", " " ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") # Set up levels and label for the required combined column add_combo <- add_combo_facet("Combined", label = "Combined", levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg") ) mysplit <- make_split_fun(post = list(add_combo)) 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 = "TRT01A") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> split_cols_by("colspan_trt", split_fun = trim_levels_to_map(map = colspan_trt_map) ) |> split_cols_by("TRT01A", show_colcounts = FALSE, split_fun = mysplit ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplecombinedcolumn1"), orientation = "landscape") ## ----combined_column_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplecombinedcolumn1", orientation = "landscape") ## ----improved_combined_column_setup, eval=FALSE------------------------------- # # 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)) ## ----improved_combined_column_full-------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), colspan_trt = factor(c("Active Study Agent", "Active Study Agent", "Active Study Agent", " ", "Active Study Agent", "Active Study Agent", "Active Study Agent", " "), levels = c( "Active Study Agent", " " ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") # Set up levels and label for the required combined column add_combo <- add_combo_facet("Combined", label = "Combined", levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg") ) # 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)) 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 = "TRT01A") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> split_cols_by("colspan_trt", split_fun = trim_levels_to_map(map = colspan_trt_map) ) |> split_cols_by("TRT01A", show_colcounts = FALSE, split_fun = mysplit ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplecombinedcolumn2"), orientation = "landscape") ## ----improved_combined_column_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplecombinedcolumn2", orientation = "landscape") ## ----newline_data------------------------------------------------------------- adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) adsl ## ----newline_table_rtf-------------------------------------------------------- library(junco) library(rtables) adsl <- data.frame(TRT01A = c("Example Drug\\line 5 mg", "Example Drug\\line 10 mg", "Example Drug\\line 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) lyt <- basic_table( show_colcounts = FALSE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A",, show_colcounts = FALSE ) |> ### analyze height analyze("HEIGHT", afun = list_wrap_x(summary), format = "xx.xx") result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/newlinetable"), orientation = "landscape") ## ----newline_table_docx------------------------------------------------------- library(junco) library(rtables) adsl <- data.frame(TRT01A = c("Example Drug\n 5 mg", "Example Drug\n 10 mg", "Example Drug\n 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) lyt <- basic_table( show_colcounts = FALSE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A",, show_colcounts = FALSE ) |> ### analyze height analyze("HEIGHT", afun = list_wrap_x(summary), format = "xx.xx") result <- build_table(lyt, adsl) result <- set_titles(result, titles) export_as_docx_j(result, tblid = "examplenewline", output_dir = out_dir, orientation = "landscape") ## ----newline_table_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "newlinetable", orientation = "landscape") ## ----newline_listing_rtf------------------------------------------------------ library(junco) library(rlistings) adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) |> formatters::var_relabel(TRT01A = "Actual Treatment for\\line Period 01") |> formatters::var_relabel(SUBJECT = "Subject") |> formatters::var_relabel(HEIGHT = "Height (in)") result <- rlistings::as_listing( df = adsl, key_cols = c("TRT01A", "SUBJECT"), disp_cols = "HEIGHT" ) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplelistingnewline2"), orientation = "landscape") ## ----newline_listing_docx----------------------------------------------------- library(junco) library(rlistings) adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) |> formatters::var_relabel(TRT01A = "Actual Treatment for\n Period 01") |> formatters::var_relabel(SUBJECT = "Subject") |> formatters::var_relabel(HEIGHT = "Height (in)") result <- rlistings::as_listing( df = adsl, key_cols = c("TRT01A", "SUBJECT"), disp_cols = "HEIGHT" ) result <- set_titles(result, titles) export_as_docx_j(result, tblid = "examplelistingnewline2", output_dir = out_dir, orientation = "landscape") ## ----newline_listing_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplelistingnewline2", orientation = "landscape") ## ----border_matrix------------------------------------------------------------ library(junco) adsl <- data.frame(span = c("Example Drug Low Dose", "Example Drug Low Dose", "Example Drug High Dose", " "), TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) lyt <- basic_table( show_colcounts = FALSE, colcount_format = "N=xx" ) |> ### first level in column header split_cols_by("span",, show_colcounts = FALSE ) |> ### second level in column header split_cols_by("TRT01A",, show_colcounts = FALSE ) |> ### analyze height analyze("HEIGHT", afun = list_wrap_x(summary), format = "xx.xx") result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/bordertable"), orientation = "landscape") ## ----border_matrix_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "bordertable", orientation = "landscape") ## ----default_border_matrix---------------------------------------------------- header_border <- junco:::make_header_bordmat(obj = result) header_border ## ----updated_border_matrix---------------------------------------------------- header_border[1, 4] <- 4 header_border ## ----custom_border_matrix----------------------------------------------------- tt_to_tlgrtf(result, file = paste0(out_dir, "/custombordertable"), orientation = "landscape", border_mat = header_border) ## ----custom_border_matrix_docx------------------------------------------------ export_as_docx_j(result, tblid = "custombordertable", output_dir = out_dir, orientation = "landscape", border_mat = header_border) ## ----custom_border_matrix_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "custombordertable", orientation = "landscape", border_mat = header_border) ## ----default_markup_rtf------------------------------------------------------- library(tibble) dps_markup_df <- tibble::tribble( ~keyword, ~rtfstart, ~rtfend, "super", "\\super", "\\nosupersub", "sub", "\\sub", "\\nosupersub", "optional", "", "" ) dps_markup_df ## ----superscript_example_data------------------------------------------------- adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) adsl ## ----superscript_table_rtf---------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = c("Example Drug~[super a] 5 mg", "Example Drug~[super a] 10 mg", "Example Drug~[super a] 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) lyt <- basic_table( show_colcounts = FALSE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A",, show_colcounts = FALSE ) |> ### analyze height analyze("HEIGHT", afun = list_wrap_x(summary), format = "xx.xx") result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/superscripttable"), orientation = "landscape", markup_df = dps_markup_df) ## ----default_markup_docx2----------------------------------------------------- library(tibble) docx_markup_df <- tibble::tribble( ~keyword, ~replace_by, "super", "flextable::as_sup", "sub", "flextable::as_sub", "optional", "" ) docx_markup_df ## ----superscript_table_docx--------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = c("Example Drug~[super a] 5 mg", "Example Drug~[super a] 10 mg", "Example Drug~[super a] 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) lyt <- basic_table( show_colcounts = FALSE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A",, show_colcounts = FALSE ) |> ### analyze height analyze("HEIGHT", afun = list_wrap_x(summary), format = "xx.xx") result <- build_table(lyt, adsl) result <- set_titles(result, titles) export_as_docx_j(result, tblid = "superscripttable", output_dir = out_dir, orientation = "landscape", markup_df = docx_markup_df) ## ----superscript_table_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "superscripttable", orientation = "landscape", markup_df = dps_markup_df) ## ----superscript_listing_rtf-------------------------------------------------- library(junco) library(rlistings) adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) |> formatters::var_relabel(TRT01A = "Actual Treatment for Period 01~[super a]") |> formatters::var_relabel(SUBJECT = "Subject") |> formatters::var_relabel(HEIGHT = "Height (in)") result <- rlistings::as_listing( df = adsl, key_cols = c("TRT01A", "SUBJECT"), disp_cols = "HEIGHT" ) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplelistingsuperscript2"), orientation = "landscape") ## ----default_markup_docx------------------------------------------------------ library(tibble) docx_markup_df <- tibble::tribble( ~keyword, ~replace_by, "super", "flextable::as_sup", "sub", "flextable::as_sub", "optional", "" ) docx_markup_df ## ----superscript_listing_docx------------------------------------------------- library(junco) library(rlistings) adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) |> formatters::var_relabel(TRT01A = "Actual Treatment for Period 01~[super a]") |> formatters::var_relabel(SUBJECT = "Subject") |> formatters::var_relabel(HEIGHT = "Height (in)") result <- rlistings::as_listing( df = adsl, key_cols = c("TRT01A", "SUBJECT"), disp_cols = "HEIGHT" ) result <- set_titles(result, titles) export_as_docx_j(result, tblid = "examplelistingsuperscript2", output_dir = out_dir, orientation = "landscape", markup_df = docx_markup_df) ## ----superscript_listing_rtf_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result, "examplelistingsuperscript2", orientation = "landscape", markup_df = dps_markup_df) ## ----multiple_docs_data_prep-------------------------------------------------- library(tern) library(dplyr) library(rtables) library(junco) ################################################################################ # Define script level parameters: ################################################################################ string_map <- default_str_map trtvar <- "TRT01A" popfl <- "SAFFL" ################################################################################ # Process Data: ################################################################################ adsl <- pharmaverseadamjnj::adsl %>% filter(!!rlang::sym(popfl) == "Y") %>% select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl), RACE) adae <- pharmaverseadamjnj::adae %>% filter(TRTEMFL == "Y" & AEBODSYS == "Skin and subcutaneous tissue disorders") %>% select(USUBJID, TRTEMFL, AEBODSYS, AEDECOD, RACE) adsl$colspan_trt <- factor(ifelse(adsl[[trtvar]] == "Placebo", " ", "Active Study Agent"), levels = c("Active Study Agent", " ") ) 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 ) # Add total for Race - adsl totalrace1 <- adsl %>% filter(RACE != "UNKNOWN" & !is.na(RACE)) %>% mutate(RACE = "Total") adsl <- bind_rows(totalrace1, adsl) adsl <- adsl %>% mutate(RACEcat = case_when( RACE == "Total" ~ "Total", RACE == "WHITE" ~ "White", RACE == "BLACK OR AFRICAN AMERICAN" ~ "Black", RACE == "ASIAN" ~ "Asian", RACE != "UNKNOWN" & !is.na(RACE) ~ "Other" )) %>% filter(RACEcat %in% c("Total", "White", "Black", "Asian", "Other")) %>% select(-RACE) adsl$spanheader <- factor(ifelse(adsl$RACEcat == "Total", " ", "Race"), levels = c(" ", "Race") ) adsl$RACEcat <- factor(adsl$RACEcat, levels = c("Total", "White", "Black", "Asian", "Other")) # Add total for Race - adae totalrace2 <- adae %>% filter(RACE != "UNKNOWN" & !is.na(RACE)) %>% mutate(RACE = "Total") adae <- bind_rows(totalrace2, adae) adae <- adae %>% mutate(RACEcat = case_when( RACE == "Total" ~ "Total", RACE == "WHITE" ~ "White", RACE == "BLACK OR AFRICAN AMERICAN" ~ "Black", RACE == "ASIAN" ~ "Asian", RACE != "UNKNOWN" & !is.na(RACE) ~ "Other" )) %>% filter(RACEcat %in% c("Total", "White", "Black", "Asian", "Other")) %>% select(-RACE) adae$RACEcat <- factor(adae$RACEcat, levels = c("Total", "White", "Black", "Asian", "Other")) # join data together ae <- left_join(adsl, adae, by = c("USUBJID", "RACEcat")) ################################################################################ # Define layout and build table: ################################################################################ extra_args_1 <- list(denom = "n_altdf", .stats = c("count_unique_fraction") ) extra_args_2 <- list(denom = "n_altdf", .stats = c("count_unique") ) lyt <- basic_table( top_level_section_div = " ", show_colcounts = FALSE ) %>% split_cols_by("colspan_trt", split_fun = trim_levels_to_map(map = colspan_trt_map)) lyt <- lyt %>% split_cols_by(trtvar) lyt <- lyt %>% split_cols_by("spanheader", split_fun = trim_levels_in_group("RACEcat")) %>% split_cols_by("RACEcat") %>% analyze(popfl, afun = a_freq_j, show_labels = "hidden", section_div = c(" "), extra_args = append(extra_args_2, list( label = "Analysis set: Safety", val = "Y", section_div = c(" "))) ) %>% analyze("TRTEMFL", afun = a_freq_j, show_labels = "hidden", extra_args = append(extra_args_1, list(label = "Subjects with >=1 AE", val = "Y", section_div = c(" "))) ) %>% split_rows_by("AEBODSYS", split_label = "System Organ Class", split_fun = trim_levels_in_group("AEDECOD"), label_pos = "topleft", section_div = c(" "), nested = FALSE ) %>% summarize_row_groups("AEBODSYS", cfun = a_freq_j, extra_args = extra_args_1 ) %>% analyze("AEDECOD", afun = a_freq_j, extra_args = extra_args_1 ) %>% append_topleft(" Preferred Term, n (%)") result <- build_table(lyt, ae, alt_counts_df = adsl) result <- set_titles(result, titles) ######################################################################################### # Post-Processing step to sort by descending count on chosen active treatment columns. # For this table we can use a defined colpath so it takes the appropriate sub-column ("Total") # for the last active treatment group/combined and use this for its sort order. # If you only have 1 active treatment arm, consider using jj_complex_scorefun(spanningheadercolvar = NA, usefirstcol = TRUE) # See function documentation for jj_complex_scorefun should your require a different sorting behavior. ######################################################################################### # col_paths_summary(result) if (length(adae$TRTEMFL) != 0) { result <- sort_at_path(result, c("root", "AEBODSYS"), scorefun = jj_complex_scorefun(colpath = c("colspan_trt", "Active Study Agent", trtvar, "Xanomeline High Dose", "spanheader", " ", "RACEcat", "Total")) ) result <- sort_at_path(result, c("root", "AEBODSYS", "*", "AEDECOD"), scorefun = jj_complex_scorefun(colpath = c("colspan_trt", "Active Study Agent", trtvar, "Xanomeline High Dose", "spanheader", " ", "RACEcat", "Total")) ) } ## ----multiple_docs_table1----------------------------------------------------- ################################################################################ # Convert to tbl file and output table ################################################################################ tt_to_tlgrtf(string_map = string_map, tt = result, file = paste0(out_dir, "/aetablemultipledocs1"), orientation = "landscape" ) ## ----multiple_docs_table1_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- x <- tt_to_flextable_j(string_map = string_map, tt = result, "aetablemultipledocs1", orientation = "landscape", paginate= TRUE) x[[1]] knitr::asis_output("

") x[[2]] knitr::asis_output("

") ## ----multiple_docs_table2----------------------------------------------------- ################################################################################ # Convert to tbl file and output table ################################################################################ tt_to_tlgrtf(string_map = string_map, tt = result, file = paste0(out_dir, "/aetablemultipledocs2"), orientation = "landscape", nosplitin = list(cols = c(trtvar)) ) ## ----multiple_docs_table2_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- x <- tt_to_flextable_j(string_map = string_map, tt = result, "aetablemultipledocs2", orientation = "landscape", nosplitin = list(cols = c(trtvar)), paginate= TRUE) x[[1]] knitr::asis_output("

") x[[2]] knitr::asis_output("

") x[[3]] knitr::asis_output("

") ## ----multiple_docs_table3----------------------------------------------------- ################################################################################ # Convert to tbl file and output table ################################################################################ tt_to_tlgrtf(string_map = string_map, tt = result, file = paste0(out_dir, "/aetablemultipledocs3"), orientation = "landscape", nosplitin = list(cols = c(trtvar)), combined_rtf = TRUE ) ## ----multiple_docs_table3_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- x <- tt_to_flextable_j(string_map = string_map, tt = result, "aetablemultipledocs3", orientation = "landscape", nosplitin = list(cols = c(trtvar)), combined_rtf = TRUE, paginate = TRUE) x[[1]] knitr::asis_output("

") x[[2]] knitr::asis_output("

") x[[3]] knitr::asis_output("

") ## ----page_break_table--------------------------------------------------------- library(junco) adsl <- data.frame(TRT01A = factor(c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo", "Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), levels = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo" ) ), USUBJID = c("1", "2", "3", "4", "5", "6", "7", "8"), RESPONSE = factor(c("Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No"), levels = c("Yes", "No") ), SEX = factor(c("Male", "Female", "Male", "Female", "Female", "Male", "Female", "Male"), levels = c("Male", "Female") ) ) |> var_relabel(RESPONSE = "Response") lyt <- basic_table( show_colcounts = TRUE, colcount_format = "N=xx" ) |> ### first columns split_cols_by("TRT01A", show_colcounts = FALSE ) |> ### create table body row sections based on SEX split_rows_by("SEX", section_div = c(" "), page_by = TRUE, split_fun = drop_split_levels ) |> summarize_row_groups("SEX", cfun =a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, extrablankline = TRUE, .stats = c("count_unique") ) ) |> ### analyze height analyze("RESPONSE", var_labels = c("Response"), show_labels = "visible", afun = a_freq_j, extra_args = list(denom = "n_df", denom_by = "SEX", riskdiff = FALSE, .stats = c("count_unique_fraction") ) ) result <- build_table(lyt, adsl) result <- set_titles(result, titles) tt_to_tlgrtf(result, file = paste0(out_dir, "/examplepagebreak")) ## ----page_break_table_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- male <- result[1:5, keep_titles = TRUE, keep_footers = FALSE] tt_to_flextable_j(male, "examplepagebreak") knitr::asis_output("

") ## ----page_break_table_display_part2, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- female <- result[6:10, keep_titles = TRUE, keep_footers = TRUE] tt_to_flextable_j(female, "examplepagebreak") ## ----split_listing_part1------------------------------------------------------ library(junco) library(rlistings) adsl <- data.frame(TRT01A = c("Example Drug 5 mg", "Example Drug 10 mg", "Example Drug 20 mg", "Placebo"), SUBJECT = c("1", "2", "3", "4"), HEIGHT = c(70, 74, 60, 64 ) ) |> formatters::var_relabel(TRT01A = "Actual Treatment for Period 01~[super a]") |> formatters::var_relabel(SUBJECT = "Subject") |> formatters::var_relabel(HEIGHT = "Height (in)") result <- rlistings::as_listing( df = adsl, key_cols = c("TRT01A", "SUBJECT"), disp_cols = "HEIGHT" ) result <- set_titles(result, titles) keep <- result$TRT01A %in% c("Example Drug 5 mg", "Example Drug 10 mg") result1 <- result[keep, ] tt_to_tlgrtf(result1, file = paste0(out_dir, "/examplelistingmultiplefilesPART1OF2"), orientation = "landscape" ) ## ----split_listing_docx_part1------------------------------------------------- export_as_docx_j(result1, tblid = "examplelistingmultiplefilesPART1OF2", output_dir = out_dir, orientation = "landscape" ) ## ----split_listing_part1_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result1, "examplelistingmultiplefilesPART1OF2", orientation = "landscape") ## ----split_listing_part2------------------------------------------------------ keep <- result$TRT01A %in% c("Example Drug 20 mg", "Placebo") result2 <- result[keep, ] tt_to_tlgrtf(result2, file = paste0(out_dir, "/examplelistingmultiplefilesPART2OF2"), orientation = "landscape" ) ## ----split_listing_docx_part2------------------------------------------------- export_as_docx_j(result2, tblid = "examplelistingmultiplefilesPART2OF2", output_dir = out_dir, orientation = "landscape" ) ## ----split_listing_part2_display, echo=FALSE, fig.align="center", out.width="100%", out.height="200px"---- tt_to_flextable_j(result2, "examplelistingmultiplefilesPART2OF2", orientation = "landscape")