TLG Catalog - Stable
  • Stable
    • Dev
  1. Tables
  2. Adverse Events
  3. AET09
  • Introduction

  • Tables
    • ADA
      • ADAT01
      • ADAT02
      • ADAT03
      • ADAT04A
      • ADAT04B
    • Adverse Events
      • AET01
      • AET01_AESI
      • AET02
      • AET02_SMQ
      • AET03
      • AET04
      • AET04_PI
      • AET05
      • AET05_ALL
      • AET06
      • AET06_SMQ
      • AET07
      • AET09
      • AET09_SMQ
      • AET10
    • Concomitant Medications
      • CMT01
      • CMT01A
      • CMT01B
      • CMT02_PT
    • Deaths
      • DTHT01
    • Demography
      • DMT01
    • Disclosures
      • DISCLOSUREST01
      • EUDRAT01
      • EUDRAT02
    • Disposition
      • DST01
      • PDT01
      • PDT02
    • ECG
      • EGT01
      • EGT02
      • EGT03
      • EGT04
      • EGT05_QTCAT
    • Efficacy
      • AOVT01
      • AOVT02
      • AOVT03
      • CFBT01
      • CMHT01
      • COXT01
      • COXT02
      • DORT01
      • LGRT02
      • MMRMT01
      • ONCT05
      • RATET01
      • RBMIT01
      • RSPT01
      • TTET01
    • Exposure
      • EXT01
    • Lab Results
      • LBT01
      • LBT02
      • LBT03
      • LBT04
      • LBT05
      • LBT06
      • LBT07
      • LBT08
      • LBT09
      • LBT10
      • LBT10_BL
      • LBT11
      • LBT11_BL
      • LBT12
      • LBT12_BL
      • LBT13
      • LBT14
      • LBT15
    • Medical History
      • MHT01
    • Pharmacokinetic
      • PKCT01
      • PKPT02
      • PKPT03
      • PKPT04
      • PKPT05
      • PKPT06
      • PKPT07
      • PKPT08
      • PKPT11
    • Risk Management Plan
      • RMPT01
      • RMPT03
      • RMPT04
      • RMPT05
      • RMPT06
    • Safety
      • ENTXX
    • Vital Signs
      • VST01
      • VST02
  • Listings
    • ADA
      • ADAL02
    • Adverse Events
      • AEL01
      • AEL01_NOLLT
      • AEL02
      • AEL02_ED
      • AEL03
      • AEL04
    • Concomitant Medications
      • CML01
      • CML02A_GL
      • CML02B_GL
    • Development Safety Update Report
      • DSUR4
    • Disposition
      • DSL01
      • DSL02
    • ECG
      • EGL01
    • Efficacy
      • ONCL01
    • Exposure
      • EXL01
    • Lab Results
      • LBL01
      • LBL01_RLS
      • LBL02A
      • LBL02A_RLS
      • LBL02B
    • Medical History
      • MHL01
    • Pharmacokinetic
      • ADAL01
      • PKCL01
      • PKCL02
      • PKPL01
      • PKPL02
      • PKPL04
    • Vital Signs
      • VSL01
  • Graphs
    • Efficacy
      • FSTG01
      • FSTG02
      • KMG01
      • MMRMG01
      • MMRMG02
    • Other
      • BRG01
      • BWG01
      • CIG01
      • IPPG01
      • LTG01
      • MNG01
    • Pharmacokinetic
      • PKCG01
      • PKCG02
      • PKCG03
      • PKPG01
      • PKPG02
      • PKPG03
      • PKPG04
      • PKPG06

  • Appendix
    • Reproducibility

  • Index

On this page

  • Output
  • teal App
  • Reproducibility
    • Timestamp
    • Session Info
    • .lock file
  • Edit this page
  • Report an issue
  1. Tables
  2. Adverse Events
  3. AET09

AET09

Adverse Events Related to Study Drug


Output

  • Standard Table
  • Table Including High-Level Terms
  • Data Setup
  • Preview
  • Try this using WebR
Code
# Define the split function
split_fun <- drop_split_levels

lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ARM") %>%
  add_overall_col(label = "All Patients") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Overall total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae_f, "AEDECOD", indent = 1L)

tbl1 <- build_table(
  lyt = lyt,
  df = adae_f,
  alt_counts_df = adsl
) %>%
  prune_table()

result <- tbl1 %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
Body System or Organ Class                                                          A: Drug X    B: Placebo    C: Combination   All Patients
  Dictionary-Derived Term                                                            (N=134)       (N=134)        (N=132)         (N=400)   
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event related to study drug     105 (78.4%)   108 (80.6%)    109 (82.6%)     322 (80.5%) 
Overall total number of events related to study drug                                   282           299            336             917     
cl D.2                                                                                                                                      
  Total number of patients with at least one adverse event related to study drug   47 (35.1%)    58 (43.3%)      57 (43.2%)     162 (40.5%) 
  Total number of events related to study drug                                         62            72              74             208     
  dcd D.2.1.5.3                                                                    47 (35.1%)    58 (43.3%)      57 (43.2%)     162 (40.5%) 
cl D.1                                                                                                                                      
  Total number of patients with at least one adverse event related to study drug   50 (37.3%)    42 (31.3%)      51 (38.6%)     143 (35.8%) 
  Total number of events related to study drug                                         61            51              71             183     
  dcd D.1.1.1.1                                                                    50 (37.3%)    42 (31.3%)      51 (38.6%)     143 (35.8%) 
cl B.1                                                                                                                                      
  Total number of patients with at least one adverse event related to study drug   47 (35.1%)    49 (36.6%)      43 (32.6%)     139 (34.8%) 
  Total number of events related to study drug                                         56            60              62             178     
  dcd B.1.1.1.1                                                                    47 (35.1%)    49 (36.6%)      43 (32.6%)     139 (34.8%) 
cl C.2                                                                                                                                      
  Total number of patients with at least one adverse event related to study drug   35 (26.1%)    48 (35.8%)      55 (41.7%)     138 (34.5%) 
  Total number of events related to study drug                                         48            53              65             166     
  dcd C.2.1.2.1                                                                    35 (26.1%)    48 (35.8%)      55 (41.7%)     138 (34.5%) 
cl C.1                                                                                                                                      
  Total number of patients with at least one adverse event related to study drug   43 (32.1%)    46 (34.3%)      43 (32.6%)     132 (33.0%) 
  Total number of events related to study drug                                         55            63              64             182     
  dcd C.1.1.1.3                                                                    43 (32.1%)    46 (34.3%)      43 (32.6%)     132 (33.0%) 
WarningExperimental use!

WebR is a tool allowing you to run R code in the web browser. Modify the code below and click run to see the results. Alternatively, copy the code and click here to open WebR in a new tab.

  • Preview
  • Try this using WebR
Code
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ARM") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Overall total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    indent_mod = 1L,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEHLT",
    child_labels = "visible",
    nested = TRUE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEHLT)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae_f, c("AEDECOD"), indent = 2L)

tbl2 <- build_table(
  lyt = lyt,
  df = adae_f,
  alt_counts_df = adsl
) %>%
  prune_table()

result <- tbl2 %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
Body System or Organ Class                                                                                                       
  High Level Term                                                                       A: Drug X    B: Placebo    C: Combination
    Dictionary-Derived Term                                                              (N=134)       (N=134)        (N=132)    
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event related to study drug         105 (78.4%)   108 (80.6%)    109 (82.6%)  
Overall total number of events related to study drug                                       282           299            336      
  cl D.2                                                                                                                         
    Total number of patients with at least one adverse event related to study drug     47 (35.1%)    58 (43.3%)      57 (43.2%)  
    Total number of events related to study drug                                           62            72              74      
    hlt D.2.1.5                                                                                                                  
      Total number of patients with at least one adverse event related to study drug   47 (35.1%)    58 (43.3%)      57 (43.2%)  
      Total number of events related to study drug                                         62            72              74      
      dcd D.2.1.5.3                                                                    47 (35.1%)    58 (43.3%)      57 (43.2%)  
  cl D.1                                                                                                                         
    Total number of patients with at least one adverse event related to study drug     50 (37.3%)    42 (31.3%)      51 (38.6%)  
    Total number of events related to study drug                                           61            51              71      
    hlt D.1.1.1                                                                                                                  
      Total number of patients with at least one adverse event related to study drug   50 (37.3%)    42 (31.3%)      51 (38.6%)  
      Total number of events related to study drug                                         61            51              71      
      dcd D.1.1.1.1                                                                    50 (37.3%)    42 (31.3%)      51 (38.6%)  
  cl B.1                                                                                                                         
    Total number of patients with at least one adverse event related to study drug     47 (35.1%)    49 (36.6%)      43 (32.6%)  
    Total number of events related to study drug                                           56            60              62      
    hlt B.1.1.1                                                                                                                  
      Total number of patients with at least one adverse event related to study drug   47 (35.1%)    49 (36.6%)      43 (32.6%)  
      Total number of events related to study drug                                         56            60              62      
      dcd B.1.1.1.1                                                                    47 (35.1%)    49 (36.6%)      43 (32.6%)  
  cl C.2                                                                                                                         
    Total number of patients with at least one adverse event related to study drug     35 (26.1%)    48 (35.8%)      55 (41.7%)  
    Total number of events related to study drug                                           48            53              65      
    hlt C.2.1.2                                                                                                                  
      Total number of patients with at least one adverse event related to study drug   35 (26.1%)    48 (35.8%)      55 (41.7%)  
      Total number of events related to study drug                                         48            53              65      
      dcd C.2.1.2.1                                                                    35 (26.1%)    48 (35.8%)      55 (41.7%)  
  cl C.1                                                                                                                         
    Total number of patients with at least one adverse event related to study drug     43 (32.1%)    46 (34.3%)      43 (32.6%)  
    Total number of events related to study drug                                           55            63              64      
    hlt C.1.1.1                                                                                                                  
      Total number of patients with at least one adverse event related to study drug   43 (32.1%)    46 (34.3%)      43 (32.6%)  
      Total number of events related to study drug                                         55            63              64      
      dcd C.1.1.1.3                                                                    43 (32.1%)    46 (34.3%)      43 (32.6%)  
WarningExperimental use!

WebR is a tool allowing you to run R code in the web browser. Modify the code below and click run to see the results. Alternatively, copy the code and click here to open WebR in a new tab.

Code
library(dplyr)
library(tern)

adsl <- random.cdisc.data::cadsl
adae <- random.cdisc.data::cadae

# Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
adsl <- df_explicit_na(adsl)
adae <- df_explicit_na(adae)

adae_labels <- var_labels(adae)

adae_f <- adae %>%
  filter(AEREL == "Y")

var_labels(adae_f) <- adae_labels

teal App

  • Preview
  • Try this using shinylive
Code
library(teal.modules.clinical)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  ADSL <- random.cdisc.data::cadsl
  ADAE <- random.cdisc.data::cadae

  # Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
  ADSL <- df_explicit_na(ADSL)
  ADAE <- df_explicit_na(ADAE)
})
join_keys(data) <- default_cdisc_join_keys[c("ADSL", "ADAE")]

## Reusable Configuration For Modules
ADAE <- data[["ADAE"]]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Events Related to Study Drug",
      dataname = "ADAE",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      llt = choices_selected(
        choices = variable_choices(ADAE, c("AETERM", "AEDECOD")),
        selected = c("AEDECOD")
      ),
      hlt = choices_selected(
        choices = variable_choices(ADAE, c("AEBODSYS", "AEHLT")),
        selected = c("AEBODSYS")
      ),
      add_total = FALSE,
      event_type = "adverse event related to study drug", # define event type here
    )
  ),
  filter = teal_slices(teal_slice("ADAE", "AEREL", selected = "Y")) # related AEs only
)

shinyApp(app$ui, app$server)

WarningExperimental use!

shinylive allow you to modify to run shiny application entirely in the web browser. Modify the code below and click re-run the app to see the results. The performance is slighly worse and some of the features (e.g. downloading) might not work at all.

#| '!! shinylive warning !!': |
#|   shinylive does not work in self-contained HTML documents.
#|   Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 800
#| editorHeight: 200
#| components: [viewer, editor]
#| layout: vertical

# -- WEBR HELPERS --
options(webr_pkg_repos = c("r-universe" = "https://insightsengineering.r-universe.dev", getOption("webr_pkg_repos")))

# -- APP CODE --
library(teal.modules.clinical)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  ADSL <- random.cdisc.data::cadsl
  ADAE <- random.cdisc.data::cadae

  # Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
  ADSL <- df_explicit_na(ADSL)
  ADAE <- df_explicit_na(ADAE)
})
join_keys(data) <- default_cdisc_join_keys[c("ADSL", "ADAE")]

## Reusable Configuration For Modules
ADAE <- data[["ADAE"]]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Events Related to Study Drug",
      dataname = "ADAE",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      llt = choices_selected(
        choices = variable_choices(ADAE, c("AETERM", "AEDECOD")),
        selected = c("AEDECOD")
      ),
      hlt = choices_selected(
        choices = variable_choices(ADAE, c("AEBODSYS", "AEHLT")),
        selected = c("AEBODSYS")
      ),
      add_total = FALSE,
      event_type = "adverse event related to study drug", # define event type here
    )
  ),
  filter = teal_slices(teal_slice("ADAE", "AEREL", selected = "Y")) # related AEs only
)

shinyApp(app$ui, app$server)

Reproducibility

Timestamp

[1] "2026-06-17 18:38:34 UTC"

Session Info

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.2 (2025-10-31)
 os       Ubuntu 24.04.4 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Etc/UTC
 date     2026-06-17
 pandoc   3.9 @ /usr/bin/ (via rmarkdown)
 quarto   1.9.38 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package               * version   date (UTC) lib source
 backports               1.5.1     2026-04-03 [1] CRAN (R 4.5.2)
 brio                    1.1.5     2024-04-24 [1] CRAN (R 4.5.2)
 broom                   1.0.13    2026-05-14 [1] CRAN (R 4.5.2)
 bsicons                 0.1.2     2023-11-04 [1] CRAN (R 4.5.2)
 bslib                   0.11.0    2026-05-16 [1] CRAN (R 4.5.2)
 cachem                  1.1.0     2024-05-16 [1] CRAN (R 4.5.2)
 callr                   3.8.0     2026-06-05 [1] CRAN (R 4.5.2)
 checkmate               2.3.4     2026-02-03 [1] CRAN (R 4.5.2)
 chromote                0.5.1     2025-04-24 [1] CRAN (R 4.5.2)
 cli                     3.6.6     2026-04-09 [1] CRAN (R 4.5.2)
 codetools               0.2-20    2024-03-31 [2] CRAN (R 4.5.2)
 curl                    7.1.0     2026-04-22 [1] CRAN (R 4.5.2)
 dichromat               2.0-0.1   2022-05-02 [1] CRAN (R 4.5.2)
 digest                  0.6.39    2025-11-19 [1] CRAN (R 4.5.2)
 dplyr                 * 1.2.1     2026-04-03 [1] CRAN (R 4.5.2)
 evaluate                1.0.5     2025-08-27 [1] CRAN (R 4.5.2)
 farver                  2.1.2     2024-05-13 [1] CRAN (R 4.5.2)
 fastmap                 1.2.0     2024-05-15 [1] CRAN (R 4.5.2)
 fontawesome             0.5.3     2024-11-16 [1] CRAN (R 4.5.2)
 forcats                 1.0.1     2025-09-25 [1] CRAN (R 4.5.2)
 formatR                 1.14      2023-01-17 [1] CRAN (R 4.5.2)
 formatters            * 0.5.12    2025-12-08 [1] CRAN (R 4.5.2)
 fs                      2.1.0     2026-04-18 [1] CRAN (R 4.5.2)
 generics                0.1.4     2025-05-09 [1] CRAN (R 4.5.2)
 ggplot2                 4.0.3     2026-04-22 [1] CRAN (R 4.5.2)
 glue                    1.8.1     2026-04-17 [1] CRAN (R 4.5.2)
 gtable                  0.3.6     2024-10-25 [1] CRAN (R 4.5.2)
 htmltools               0.5.9     2025-12-04 [1] CRAN (R 4.5.2)
 htmlwidgets             1.6.4     2023-12-06 [1] CRAN (R 4.5.2)
 httpuv                  1.6.17    2026-03-18 [1] CRAN (R 4.5.2)
 jquerylib               0.1.4     2021-04-26 [1] CRAN (R 4.5.2)
 jsonlite                2.0.0     2025-03-27 [1] CRAN (R 4.5.2)
 knitr                   1.51      2025-12-20 [1] CRAN (R 4.5.2)
 later                   1.4.8     2026-03-05 [1] CRAN (R 4.5.2)
 lattice                 0.22-9    2026-02-09 [2] CRAN (R 4.5.2)
 lifecycle               1.0.5     2026-01-08 [1] CRAN (R 4.5.2)
 logger                  0.4.2     2026-05-10 [1] CRAN (R 4.5.2)
 magrittr              * 2.0.5     2026-04-04 [1] CRAN (R 4.5.2)
 Matrix                  1.7-5     2026-03-21 [1] CRAN (R 4.5.2)
 memoise                 2.0.1     2021-11-26 [1] CRAN (R 4.5.2)
 mime                    0.13      2025-03-17 [1] CRAN (R 4.5.2)
 nestcolor               0.1.3     2025-01-21 [1] CRAN (R 4.5.2)
 otel                    0.2.0     2025-08-29 [1] CRAN (R 4.5.2)
 pillar                  1.11.1    2025-09-17 [1] CRAN (R 4.5.2)
 pkgcache                2.2.5     2026-04-09 [1] CRAN (R 4.5.2)
 pkgconfig               2.0.3     2019-09-22 [1] CRAN (R 4.5.2)
 processx                3.9.0     2026-04-22 [1] CRAN (R 4.5.2)
 promises                1.5.0     2025-11-01 [1] CRAN (R 4.5.2)
 ps                      1.9.3     2026-04-20 [1] CRAN (R 4.5.2)
 purrr                   1.2.2     2026-04-10 [1] CRAN (R 4.5.2)
 R6                      2.6.1     2025-02-15 [1] CRAN (R 4.5.2)
 ragg                    1.5.2     2026-03-23 [1] CRAN (R 4.5.2)
 random.cdisc.data       0.3.16    2024-10-10 [1] CRAN (R 4.5.2)
 rbibutils               2.4.1     2026-01-21 [1] CRAN (R 4.5.2)
 RColorBrewer            1.1-3     2022-04-03 [1] CRAN (R 4.5.2)
 Rcpp                    1.1.1-1.1 2026-04-24 [1] CRAN (R 4.5.2)
 Rdpack                  2.6.6     2026-02-08 [1] CRAN (R 4.5.2)
 rlang                   1.2.0     2026-04-06 [1] CRAN (R 4.5.2)
 rmarkdown               2.31      2026-03-26 [1] CRAN (R 4.5.2)
 rtables               * 0.6.16    2026-04-22 [1] CRAN (R 4.5.2)
 S7                      0.2.2     2026-04-22 [1] CRAN (R 4.5.2)
 sass                    0.4.10    2025-04-11 [1] CRAN (R 4.5.2)
 scales                  1.4.0     2025-04-24 [1] CRAN (R 4.5.2)
 sessioninfo             1.2.4     2026-06-04 [1] CRAN (R 4.5.2)
 shiny                 * 1.13.0    2026-02-20 [1] CRAN (R 4.5.2)
 shinycssloaders         1.1.0     2024-07-30 [1] CRAN (R 4.5.2)
 shinyjs                 2.1.1     2026-01-15 [1] CRAN (R 4.5.2)
 shinyvalidate           0.1.3     2023-10-04 [1] CRAN (R 4.5.2)
 shinyWidgets            0.9.1     2026-03-09 [1] CRAN (R 4.5.2)
 stringi                 1.8.7     2025-03-27 [1] CRAN (R 4.5.2)
 stringr                 1.6.0     2025-11-04 [1] CRAN (R 4.5.2)
 survival                3.8-6     2026-01-16 [2] CRAN (R 4.5.2)
 systemfonts             1.3.2     2026-03-05 [1] CRAN (R 4.5.2)
 teal                  * 1.1.0     2025-11-17 [1] CRAN (R 4.5.2)
 teal.code             * 0.7.1     2026-01-20 [1] CRAN (R 4.5.2)
 teal.data             * 0.8.0     2025-08-19 [1] CRAN (R 4.5.2)
 teal.logger             0.4.1     2025-12-02 [1] CRAN (R 4.5.2)
 teal.modules.clinical * 0.12.0    2025-12-04 [1] CRAN (R 4.5.2)
 teal.reporter           0.6.1     2026-02-20 [1] CRAN (R 4.5.2)
 teal.slice            * 0.8.0     2026-06-04 [1] CRAN (R 4.5.2)
 teal.transform        * 0.7.1     2025-12-03 [1] CRAN (R 4.5.2)
 teal.widgets            0.6.0     2026-02-24 [1] CRAN (R 4.5.2)
 tern                  * 0.9.10    2025-12-18 [1] CRAN (R 4.5.2)
 testthat                3.3.2     2026-01-11 [1] CRAN (R 4.5.2)
 textshaping             1.0.5     2026-03-06 [1] CRAN (R 4.5.2)
 tibble                  3.3.1     2026-01-11 [1] CRAN (R 4.5.2)
 tidyr                   1.3.2     2025-12-19 [1] CRAN (R 4.5.2)
 tidyselect              1.2.1     2024-03-11 [1] CRAN (R 4.5.2)
 vctrs                   0.7.3     2026-04-11 [1] CRAN (R 4.5.2)
 webshot                 0.5.5     2023-06-26 [1] CRAN (R 4.5.2)
 webshot2                0.1.2     2025-04-23 [1] CRAN (R 4.5.2)
 websocket               1.4.4     2025-04-10 [1] CRAN (R 4.5.2)
 withr                   3.0.2     2024-10-28 [1] CRAN (R 4.5.2)
 xfun                    0.58      2026-06-01 [1] CRAN (R 4.5.2)
 xtable                  1.8-8     2026-02-22 [1] CRAN (R 4.5.2)
 yaml                    2.3.12    2025-12-10 [1] CRAN (R 4.5.2)

 [1] /usr/local/lib/R/site-library
 [2] /usr/local/lib/R/library
 [3] /github/home/R/x86_64-pc-linux-gnu-library/4.5
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

.lock file

Download the .lock file and use renv::restore() on it to recreate environment used to generate this website.

Download

AET07
AET09_SMQ
Source Code
---
title: AET09
subtitle: Adverse Events Related to Study Drug
---

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

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

```{r setup, echo = FALSE, warning = FALSE, message = FALSE}
library(dplyr)
library(tern)

adsl <- random.cdisc.data::cadsl
adae <- random.cdisc.data::cadae

# Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
adsl <- df_explicit_na(adsl)
adae <- df_explicit_na(adae)

adae_labels <- var_labels(adae)

adae_f <- adae %>%
  filter(AEREL == "Y")

var_labels(adae_f) <- adae_labels
```

```{r include = FALSE}
webr_code_labels <- c("setup")
```

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

## Output

::::: panel-tabset
## Standard Table

::: {.panel-tabset .nav-justified group="webr"}
## {{< fa regular file-lines sm fw >}} Preview

```{r variant1, test = list(result_v1 = "result")}
# Define the split function
split_fun <- drop_split_levels

lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ARM") %>%
  add_overall_col(label = "All Patients") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Overall total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae_f, "AEDECOD", indent = 1L)

tbl1 <- build_table(
  lyt = lyt,
  df = adae_f,
  alt_counts_df = adsl
) %>%
  prune_table()

result <- tbl1 %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
```

```{r include = FALSE}
webr_code_labels <- c("variant1")
```

{{< include ../../_utils/webr.qmd >}}
:::

## Table Including High-Level Terms

::: {.panel-tabset .nav-justified group="webr"}
## {{< fa regular file-lines sm fw >}} Preview

```{r variant2, test = list(result_v2 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ARM") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Overall total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    indent_mod = 1L,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  split_rows_by(
    "AEHLT",
    child_labels = "visible",
    nested = TRUE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae_f$AEHLT)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event related to study drug",
      nonunique = "Total number of events related to study drug"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae_f, c("AEDECOD"), indent = 2L)

tbl2 <- build_table(
  lyt = lyt,
  df = adae_f,
  alt_counts_df = adsl
) %>%
  prune_table()

result <- tbl2 %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
```

```{r include = FALSE}
webr_code_labels <- c("variant2")
```

{{< include ../../_utils/webr.qmd >}}
:::

## Data Setup

```{r setup}
#| code-fold: show
```
:::::

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

## `teal` App

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

```{r teal, opts.label = c("skip_if_testing", "app")}
library(teal.modules.clinical)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  ADSL <- random.cdisc.data::cadsl
  ADAE <- random.cdisc.data::cadae

  # Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
  ADSL <- df_explicit_na(ADSL)
  ADAE <- df_explicit_na(ADAE)
})
join_keys(data) <- default_cdisc_join_keys[c("ADSL", "ADAE")]

## Reusable Configuration For Modules
ADAE <- data[["ADAE"]]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Events Related to Study Drug",
      dataname = "ADAE",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      llt = choices_selected(
        choices = variable_choices(ADAE, c("AETERM", "AEDECOD")),
        selected = c("AEDECOD")
      ),
      hlt = choices_selected(
        choices = variable_choices(ADAE, c("AEBODSYS", "AEHLT")),
        selected = c("AEBODSYS")
      ),
      add_total = FALSE,
      event_type = "adverse event related to study drug", # define event type here
    )
  ),
  filter = teal_slices(teal_slice("ADAE", "AEREL", selected = "Y")) # related AEs only
)

shinyApp(app$ui, app$server)
```

{{< include ../../_utils/shinylive.qmd >}}
:::

{{< include ../../repro.qmd >}}

Made with ❤️ by the NEST Team

  • Edit this page
  • Report an issue
Cookie Preferences