TL Catalog
  1. Tables
  2. Exposure
  3. TSIEX04
  • Introduction

  • Index

  • Tables
    • Adverse Events
      • TSFAE01A
      • TSFAE01B
      • TSFAE02
      • TSFAE02A
      • TSFAE03
      • TSFAE03A
      • TSFAE04
      • TSFAE04A
      • TSFAE05
      • TSFAE05A
      • TSFAE06A
      • TSFAE06B
      • TSFAE07A
      • TSFAE07B
      • TSFAE08
      • TSFAE09
      • TSFAE10
      • TSFAE11
      • TSFAE12
      • TSFAE13
      • TSFAE14
      • TSFAE15
      • TSFAE16
      • TSFAE17A
      • TSFAE17B
      • TSFAE17C
      • TSFAE17D
      • TSFAE19A
      • TSFAE19B
      • TSFAE19C
      • TSFAE19D
      • TSFAE20A
      • TSFAE20B
      • TSFAE20C
      • TSFAE21A
      • TSFAE21B
      • TSFAE21C
      • TSFAE21D
      • TSFAE22A
      • TSFAE22B
      • TSFAE22C
      • TSFAE23A
      • TSFAE23B
      • TSFAE23C
      • TSFAE23D
      • TSFAE24A
      • TSFAE24B
      • TSFAE24C
      • TSFAE24D
      • TSFAE24F
      • TSFDTH01
    • Clinical Laboratory Evaluation
      • TSFLAB01
      • TSFLAB01A
      • TSFLAB02
      • TSFLAB02A
      • TSFLAB02B
      • TSFLAB03
      • TSFLAB03A
      • TSFLAB04A
      • TSFLAB04B
      • TSFLAB05
      • TSFLAB06
      • TSFLAB07
    • Demographic
      • TSIDEM01
      • TSIDEM02
      • TSIMH01
    • Disposition of Subjects
      • TSIDS01
      • TSIDS02
      • TSIDS02A
    • Electrocardiograms
      • TSFECG01
      • TSFECG01A
      • TSFECG02
      • TSFECG03
      • TSFECG04
      • TSFECG05
    • Exposure
      • TSIEX01
      • TSIEX02
      • TSIEX03
      • TSIEX04
      • TSIEX06
      • TSIEX07
      • TSIEX08
      • TSIEX09
      • TSIEX10
      • TSIEX11
    • Pharmacokinetics
      • TPK01A
      • TPK01B
      • TPK02
      • TPK03
    • Prior and Concomitant Therapies
      • TSICM01
      • TSICM02
      • TSICM03
      • TSICM04
      • TSICM05
      • TSICM06
      • TSICM07
      • TSICM08
    • Vital Signs and Physical Findings
      • TSFVIT01
      • TSFVIT01A
      • TSFVIT02
      • TSFVIT03
      • TSFVIT04
      • TSFVIT05
      • TSFVIT06
  • Listings
    • Adverse Events
      • LSFAE01
      • LSFAE02
      • LSFAE03
      • LSFAE04
      • LSFAE05
      • LSFAE06A
      • LSFAE06B
      • LSFDTH01
    • Clinical Laboratory Evaluation
      • LSFLAB01
    • Demographic
      • LSIDEM01
      • LSIDEM02
      • LSIMH01
    • Disposition of Subjects
      • LSIDS01
      • LSIDS02
      • LSIDS03
      • LSIDS04
      • LSIDS05
    • Electrocardiograms
      • LSFECG01
      • LSFECG02
    • Exposure
      • LSIEX01
      • LSIEX02
      • LSIEX03
    • Prior and Concomitant Therapies
      • LSICM01
    • Vital Signs and Physical Findings
      • LSFVIT01
      • LSFVIT02

  • Reproducibility

  • Changelog

On this page

  • Output
  • Edit this page
  • Report an issue
  1. Tables
  2. Exposure
  3. TSIEX04

TSIEX04

Number of Cycles Received


Output

  • Preview
Code
# Program Name:              tsiex04.R

# Prep Environment

library(envsetup)
library(tern)
library(dplyr)
library(rtables)
library(junco)

# Define script level parameters:

# - Define output ID and file location

tblid <- "TSIEX04"
fileid <- tblid
tab_titles <- get_titles_from_file(input_path = '../../_data/', tblid)
string_map <- default_str_map


trtvar <- "TRT01A"
popfl <- "SAFFL"

catlevels <- c("1 to <10", "10 to <20", ">=20")

combined_colspan_trt <- TRUE

if (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 data
adsl <- 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 exist
adexsum <- 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 together
ex <- adexsum %>% inner_join(., adsl, by = c("USUBJID"))

# Keep only columns with some data in which will remove any unwanted CRITy variables
ex <- ex[, colSums(is.na(ex)) < nrow(ex)]

# Work out how many CRITy vars we have left
excritvars <- 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 AVALCAT1
critlbls <- list()
for (i in 1: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 ex
for (i in 2: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 table

tt_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.

Download RTF file

TSIEX03
TSIEX06
Source Code
---
title: TSIEX04
subtitle: Number of Cycles Received
---

------------------------------------------------------------------------

{{< include ../../_utils/envir_hook.qmd >}}

```{r setup, echo = FALSE, warning = FALSE, message = FALSE}
options(docx.add_datetime = FALSE, tidytlg.add_datetime = FALSE)
envsetup_config_name <- "default"

# Path to the combined config file
envsetup_file_path <- file.path("../..", "envsetup.yml")

Sys.setenv(ENVSETUP_ENVIRON = '')
library(envsetup)
loaded_config <- config::get(config = envsetup_config_name, file = envsetup_file_path)
envsetup::rprofile(loaded_config)


dpscomp <- compound
dpspdr <- paste(protocol,dbrelease,rpteff,sep="__")

aptcomp <- compound
aptpdr <- paste(protocol,dbrelease,rpteff,sep="__")

###### Study specific updates (formerly in envre)

dpscomp <- "standards"
dpspdr <- "jjcs__NULL__jjcs - core"

apt <- FALSE
library(junco)
default_str_map <- rbind(default_str_map, c("&ctcae", "5.0"))

```

## Output

:::: panel-tabset
## {{< fa regular file-lines sm fw >}} Preview

```{r variant1, results='hide', warning = FALSE, message = FALSE}

# Program Name:              tsiex04.R

# Prep Environment

library(envsetup)
library(tern)
library(dplyr)
library(rtables)
library(junco)

# Define script level parameters:

# - Define output ID and file location

tblid <- "TSIEX04"
fileid <- tblid
tab_titles <- get_titles_from_file(input_path = '../../_data/', tblid)
string_map <- default_str_map


trtvar <- "TRT01A"
popfl <- "SAFFL"

catlevels <- c("1 to <10", "10 to <20", ">=20")

combined_colspan_trt <- TRUE

if (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 data
adsl <- 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 exist
adexsum <- 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 together
ex <- adexsum %>% inner_join(., adsl, by = c("USUBJID"))

# Keep only columns with some data in which will remove any unwanted CRITy variables
ex <- ex[, colSums(is.na(ex)) < nrow(ex)]

# Work out how many CRITy vars we have left
excritvars <- 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 AVALCAT1
critlbls <- list()
for (i in 1: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 ex
for (i in 2: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 table

tt_to_tlgrtf(string_map = string_map, tt = result, file = fileid, orientation = "portrait")
```
```{r result1, echo=FALSE, message=FALSE, warning=FALSE, test = list(result_v1 = "result")}
tt_to_flextable_j(result, tblid, string_map = string_map) 
```

[Download RTF file](`r paste0(tolower(tblid), '.rtf')`)
::::

Made with ❤️ by the J&J Team

  • Edit this page
  • Report an issue
Cookie Preferences