TLG Catalog - Stable
  • Stable
    • Dev
  1. Tables
  2. Adverse Events
  3. AET02
  • 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. AET02

AET02

Adverse Events


Output

  • Standard Table
  • Table with
    Event Totals
  • Table with
    High-Level Term
  • Table with Preferred
    Terms Only
  • Table with Fill-In of
    Treatment Groups
  • Table of AEs with an Incidence Rate
    \(\geq\) 5% in Any Treatment Group (subsetting
    preferred terms based on frequency)
  • Table of AEs with an Incidence Rate \(\geq\) 5% in
    Any Treatment Group (subsetting preferred terms
    based on frequency with high-level terms)
  • Table of AEs with an Incidence Rate \(\geq\) 10%
    in Any Treatment Group (subsetting
    preferred terms based on frequency)
  • Table of AEs with an Incidence Rate \(\geq\) 3
    Patients in Any Treatment Group (subsetting
    preferred terms based on number of patients)
  • Table of AEs with a Difference in Incidence Rate \(\geq\) 5%
    Between Any Treatment (subsetting preferred terms based
    on difference in percentage between treatment groups)
  • Table of AEs with an Incidence Rate \(\geq\) 5%
    in B: Placebo (subsetting preferred terms based
    on frequency for a particular treatment group)
  • Table of AEs with a Difference in Incidence Rate \(\geq\) 5% Between
    Arm A and Arm B or Arm C (displaying preferred terms with a
    difference of at least x% between selected treatment groups)
  • Data Setup
  • Preview
  • Try this using WebR
Code
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  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",
      nonunique = "Overall total number of events"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl)
result
MedDRA System Organ Class                                     A: Drug X    B: Placebo   C: Combination   All Patients
  MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)         (N=400)   
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event     100 (74.6%)   98 (73.1%)    103 (78.0%)     301 (75.2%) 
Overall total number of events                                   502          480            604             1586    
cl A.1                                                                                                               
  Total number of patients with at least one adverse event   68 (50.7%)    58 (43.3%)     76 (57.6%)     202 (50.5%) 
  Total number of events                                         115           99            137             351     
  dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)     52 (39.4%)     128 (32.0%) 
  dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)     42 (31.8%)     122 (30.5%) 
cl B.1                                                                                                               
  Total number of patients with at least one adverse event   38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
  Total number of events                                         44            43             50             137     
  dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
cl B.2                                                                                                               
  Total number of patients with at least one adverse event   62 (46.3%)    56 (41.8%)     74 (56.1%)     192 (48.0%) 
  Total number of events                                         102          106            127             335     
  dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)     46 (34.8%)     119 (29.8%) 
  dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)     45 (34.1%)     123 (30.8%) 
cl C.1                                                                                                               
  Total number of patients with at least one adverse event   36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
  Total number of events                                         47            51             54             152     
  dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
cl C.2                                                                                                               
  Total number of patients with at least one adverse event   28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
  Total number of events                                         39            40             57             136     
  dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
cl D.1                                                                                                               
  Total number of patients with at least one adverse event   64 (47.8%)    54 (40.3%)     68 (51.5%)     186 (46.5%) 
  Total number of events                                         106           84            114             304     
  dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)     46 (34.8%)     120 (30.0%) 
  dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)     40 (30.3%)     112 (28.0%) 
cl D.2                                                                                                               
  Total number of patients with at least one adverse event   37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
  Total number of events                                         49            57             65             171     
  dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
Experimental 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.

The variable result corresponds to the adverse events table. However, it includes many empty rows accounting for events which were not reported. The table can be post-processed to prune empty rows and to sort rows, for example by occurrence.

  • Preview
  • Try this using WebR
Code
result <- result %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
MedDRA System Organ Class                                     A: Drug X    B: Placebo   C: Combination   All Patients
  MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)         (N=400)   
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event     100 (74.6%)   98 (73.1%)    103 (78.0%)     301 (75.2%) 
Overall total number of events                                   502          480            604             1586    
cl A.1                                                                                                               
  Total number of patients with at least one adverse event   68 (50.7%)    58 (43.3%)     76 (57.6%)     202 (50.5%) 
  Total number of events                                         115           99            137             351     
  dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)     52 (39.4%)     128 (32.0%) 
  dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)     42 (31.8%)     122 (30.5%) 
cl B.2                                                                                                               
  Total number of patients with at least one adverse event   62 (46.3%)    56 (41.8%)     74 (56.1%)     192 (48.0%) 
  Total number of events                                         102          106            127             335     
  dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)     45 (34.1%)     123 (30.8%) 
  dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)     46 (34.8%)     119 (29.8%) 
cl D.1                                                                                                               
  Total number of patients with at least one adverse event   64 (47.8%)    54 (40.3%)     68 (51.5%)     186 (46.5%) 
  Total number of events                                         106           84            114             304     
  dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)     46 (34.8%)     120 (30.0%) 
  dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)     40 (30.3%)     112 (28.0%) 
cl D.2                                                                                                               
  Total number of patients with at least one adverse event   37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
  Total number of events                                         49            57             65             171     
  dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
cl C.2                                                                                                               
  Total number of patients with at least one adverse event   28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
  Total number of events                                         39            40             57             136     
  dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
cl B.1                                                                                                               
  Total number of patients with at least one adverse event   38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
  Total number of events                                         44            43             50             137     
  dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
cl C.1                                                                                                               
  Total number of patients with at least one adverse event   36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
  Total number of events                                         47            51             54             152     
  dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
Experimental 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 = "ACTARM") %>%
  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",
      nonunique = "Overall total number of events"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event"
    )
  ) %>%
  count_occurrences(vars = "AEDECOD", .indent_mods = -1L) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L) %>%
  count_values(
    "STUDYID",
    values = as.character(unique(adae$STUDYID)),
    .stats = "count",
    .labels = c(count = "Total number of events"),
    .indent_mods = c(count = -1L)
  )

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  ) %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  )

result
MedDRA System Organ Class                                     A: Drug X    B: Placebo   C: Combination   All Patients
  MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)         (N=400)   
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event     100 (74.6%)   98 (73.1%)    103 (78.0%)     301 (75.2%) 
Overall total number of events                                   502          480            604             1586    
cl A.1                                                                                                               
  Total number of patients with at least one adverse event   68 (50.7%)    58 (43.3%)     76 (57.6%)     202 (50.5%) 
  dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)     52 (39.4%)     128 (32.0%) 
  dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)     42 (31.8%)     122 (30.5%) 
  Total number of events                                         115           99            137             351     
cl B.2                                                                                                               
  Total number of patients with at least one adverse event   62 (46.3%)    56 (41.8%)     74 (56.1%)     192 (48.0%) 
  dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)     45 (34.1%)     123 (30.8%) 
  dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)     46 (34.8%)     119 (29.8%) 
  Total number of events                                         102          106            127             335     
cl D.1                                                                                                               
  Total number of patients with at least one adverse event   64 (47.8%)    54 (40.3%)     68 (51.5%)     186 (46.5%) 
  dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)     46 (34.8%)     120 (30.0%) 
  dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)     40 (30.3%)     112 (28.0%) 
  Total number of events                                         106           84            114             304     
cl D.2                                                                                                               
  Total number of patients with at least one adverse event   37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
  dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)     50 (37.9%)     133 (33.2%) 
  Total number of events                                         49            57             65             171     
cl C.2                                                                                                               
  Total number of patients with at least one adverse event   28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
  dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)     48 (36.4%)     112 (28.0%) 
  Total number of events                                         39            40             57             136     
cl B.1                                                                                                               
  Total number of patients with at least one adverse event   38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
  dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)     36 (27.3%)     111 (27.8%) 
  Total number of events                                         44            43             50             137     
cl C.1                                                                                                               
  Total number of patients with at least one adverse event   36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
  dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)     36 (27.3%)     106 (26.5%) 
  Total number of events                                         47            51             54             152     
Experimental 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 = "ACTARM") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Overall total number of events"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    )
  ) %>%
  split_rows_by(
    "AEHLT",
    child_labels = "visible",
    nested = TRUE,
    split_fun = split_fun,
    indent_mod = -1L,
    label_pos = "topleft",
    split_label = obj_label(adae$AEHLT)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    )
  ) %>%
  count_occurrences(vars = "AEDECOD", .indent_mods = -1L) %>%
  append_varlabels(adae, c("AEDECOD"), indent = 2L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  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
MedDRA System Organ Class                                                                               
  High Level Term                                               A: Drug X    B: Placebo   C: Combination
    MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event       100 (74.6%)   98 (73.1%)    103 (78.0%)  
Overall total number of events                                     502          480            604      
cl A.1                                                                                                  
  Total number of patients with at least one adverse event     68 (50.7%)    58 (43.3%)     76 (57.6%)  
  Total number of events                                           115           99            137      
  hlt A.1.1.1                                                                                           
    Total number of patients with at least one adverse event   68 (50.7%)    58 (43.3%)     76 (57.6%)  
    Total number of events                                         115           99            137      
    dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)     52 (39.4%)  
    dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)     42 (31.8%)  
cl B.2                                                                                                  
  Total number of patients with at least one adverse event     62 (46.3%)    56 (41.8%)     74 (56.1%)  
  Total number of events                                           102          106            127      
  hlt B.2.2.3                                                                                           
    Total number of patients with at least one adverse event   38 (28.4%)    40 (29.9%)     45 (34.1%)  
    Total number of events                                         50            55             68      
    dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)     45 (34.1%)  
  hlt B.2.1.2                                                                                           
    Total number of patients with at least one adverse event   39 (29.1%)    34 (25.4%)     46 (34.8%)  
    Total number of events                                         52            51             59      
    dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)     46 (34.8%)  
cl D.1                                                                                                  
  Total number of patients with at least one adverse event     64 (47.8%)    54 (40.3%)     68 (51.5%)  
  Total number of events                                           106           84            114      
  hlt D.1.1.1                                                                                           
    Total number of patients with at least one adverse event   42 (31.3%)    32 (23.9%)     46 (34.8%)  
    Total number of events                                         52            40             64      
    dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)     46 (34.8%)  
  hlt D.1.1.4                                                                                           
    Total number of patients with at least one adverse event   38 (28.4%)    34 (25.4%)     40 (30.3%)  
    Total number of events                                         54            44             50      
    dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)     40 (30.3%)  
cl D.2                                                                                                  
  Total number of patients with at least one adverse event     37 (27.6%)    46 (34.3%)     50 (37.9%)  
  Total number of events                                           49            57             65      
  hlt D.2.1.5                                                                                           
    Total number of patients with at least one adverse event   37 (27.6%)    46 (34.3%)     50 (37.9%)  
    Total number of events                                         49            57             65      
    dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)     50 (37.9%)  
cl C.2                                                                                                  
  Total number of patients with at least one adverse event     28 (20.9%)    36 (26.9%)     48 (36.4%)  
  Total number of events                                           39            40             57      
  hlt C.2.1.2                                                                                           
    Total number of patients with at least one adverse event   28 (20.9%)    36 (26.9%)     48 (36.4%)  
    Total number of events                                         39            40             57      
    dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)     48 (36.4%)  
cl B.1                                                                                                  
  Total number of patients with at least one adverse event     38 (28.4%)    37 (27.6%)     36 (27.3%)  
  Total number of events                                           44            43             50      
  hlt B.1.1.1                                                                                           
    Total number of patients with at least one adverse event   38 (28.4%)    37 (27.6%)     36 (27.3%)  
    Total number of events                                         44            43             50      
    dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)     36 (27.3%)  
cl C.1                                                                                                  
  Total number of patients with at least one adverse event     36 (26.9%)    34 (25.4%)     36 (27.3%)  
  Total number of events                                           47            51             54      
  hlt C.1.1.1                                                                                           
    Total number of patients with at least one adverse event   36 (26.9%)    34 (25.4%)     36 (27.3%)  
    Total number of events                                         47            51             54      
    dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    ),
    show_labels = "hidden"
  ) %>%
  count_occurrences(vars = "AEDECOD") %>%
  append_varlabels(adae, "AEDECOD")

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  sort_at_path(
    path = c("AEDECOD"),
    scorefun = score_occurrences
  )

result
                                                            A: Drug X    B: Placebo   C: Combination
MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event   100 (74.6%)   98 (73.1%)    103 (78.0%)  
Total number of events                                         502          480            604      
dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)     50 (37.9%)  
dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)     52 (39.4%)  
dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)     45 (34.1%)  
dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)     42 (31.8%)  
dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)     46 (34.8%)  
dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)     46 (34.8%)  
dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)     48 (36.4%)  
dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)     40 (30.3%)  
dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)     36 (27.3%)  
dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)     36 (27.3%)  
Experimental 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
adae_5 <- adae %>% dplyr::filter(ACTARM != "C: Combination")

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

result <- build_table(lyt, df = adae_5, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

result
MedDRA System Organ Class                                     A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term                                        (N=134)      (N=134)        (N=132)    
——————————————————————————————————————————————————————————————————————————————————————————————————————
Total number of patients with at least one adverse event     100 (74.6%)   98 (73.1%)         0       
Overall total number of events                                   502          480             0       
cl A.1                                                                                                
  Total number of patients with at least one adverse event   68 (50.7%)    58 (43.3%)         0       
  Total number of events                                         115           99             0       
  dcd A.1.1.1.2                                              41 (30.6%)    39 (29.1%)         0       
  dcd A.1.1.1.1                                              45 (33.6%)    31 (23.1%)         0       
cl B.2                                                                                                
  Total number of patients with at least one adverse event   62 (46.3%)    56 (41.8%)         0       
  Total number of events                                         102          106             0       
  dcd B.2.2.3.1                                              38 (28.4%)    40 (29.9%)         0       
  dcd B.2.1.2.1                                              39 (29.1%)    34 (25.4%)         0       
cl D.1                                                                                                
  Total number of patients with at least one adverse event   64 (47.8%)    54 (40.3%)         0       
  Total number of events                                         106           84             0       
  dcd D.1.1.1.1                                              42 (31.3%)    32 (23.9%)         0       
  dcd D.1.1.4.2                                              38 (28.4%)    34 (25.4%)         0       
cl D.2                                                                                                
  Total number of patients with at least one adverse event   37 (27.6%)    46 (34.3%)         0       
  Total number of events                                         49            57             0       
  dcd D.2.1.5.3                                              37 (27.6%)    46 (34.3%)         0       
cl B.1                                                                                                
  Total number of patients with at least one adverse event   38 (28.4%)    37 (27.6%)         0       
  Total number of events                                         44            43             0       
  dcd B.1.1.1.1                                              38 (28.4%)    37 (27.6%)         0       
cl C.1                                                                                                
  Total number of patients with at least one adverse event   36 (26.9%)    34 (25.4%)         0       
  Total number of events                                         47            51             0       
  dcd C.1.1.1.3                                              36 (26.9%)    34 (25.4%)         0       
cl C.2                                                                                                
  Total number of patients with at least one adverse event   28 (20.9%)    36 (26.9%)         0       
  Total number of events                                         39            40             0       
  dcd C.2.1.2.1                                              28 (20.9%)    36 (26.9%)         0       
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.05,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
  dcd A.1.1.1.2             41 (30.6%)   39 (29.1%)     42 (31.8%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
  dcd D.1.1.4.2             38 (28.4%)   34 (25.4%)     40 (30.3%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
cl B.1                                                              
  dcd B.1.1.1.1             38 (28.4%)   37 (27.6%)     36 (27.3%)  
cl C.1                                                              
  dcd C.1.1.1.3             36 (26.9%)   34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = TRUE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  split_rows_by(
    "AEHLT",
    child_labels = "visible",
    nested = TRUE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEHLT)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(vars = "AEDECOD") %>%
  append_varlabels(adae, c("AEDECOD"), indent = 2L)

result <- build_table(lyt, adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols,
    decreasing = TRUE
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT"),
    scorefun = cont_n_allcols,
    decreasing = TRUE
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT", "*", "AEDECOD"),
    scorefun = score_occurrences,
    decreasing = TRUE
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.05,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class                                           
  High Level Term           A: Drug X    B: Placebo   C: Combination
    MedDRA Preferred Term    (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  hlt A.1.1.1                                                       
    dcd A.1.1.1.1           45 (33.6%)   31 (23.1%)     52 (39.4%)  
    dcd A.1.1.1.2           41 (30.6%)   39 (29.1%)     42 (31.8%)  
cl B.2                                                              
  hlt B.2.2.3                                                       
    dcd B.2.2.3.1           38 (28.4%)   40 (29.9%)     45 (34.1%)  
  hlt B.2.1.2                                                       
    dcd B.2.1.2.1           39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  hlt D.1.1.1                                                       
    dcd D.1.1.1.1           42 (31.3%)   32 (23.9%)     46 (34.8%)  
  hlt D.1.1.4                                                       
    dcd D.1.1.4.2           38 (28.4%)   34 (25.4%)     40 (30.3%)  
cl D.2                                                              
  hlt D.2.1.5                                                       
    dcd D.2.1.5.3           37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  hlt C.2.1.2                                                       
    dcd C.2.1.2.1           28 (20.9%)   36 (26.9%)     48 (36.4%)  
cl B.1                                                              
  hlt B.1.1.1                                                       
    dcd B.1.1.1.1           38 (28.4%)   37 (27.6%)     36 (27.3%)  
cl C.1                                                              
  hlt C.1.1.1                                                       
    dcd C.1.1.1.3           36 (26.9%)   34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.10,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
  dcd A.1.1.1.2             41 (30.6%)   39 (29.1%)     42 (31.8%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
  dcd D.1.1.4.2             38 (28.4%)   34 (25.4%)     40 (30.3%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
cl B.1                                                              
  dcd B.1.1.1.1             38 (28.4%)   37 (27.6%)     36 (27.3%)  
cl C.1                                                              
  dcd C.1.1.1.3             36 (26.9%)   34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    split_label = obj_label(adae$AEBODSYS),
    label_pos = "topleft"
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_count_in_any_col(
  atleast = 3,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
  dcd A.1.1.1.2             41 (30.6%)   39 (29.1%)     42 (31.8%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
  dcd D.1.1.4.2             38 (28.4%)   34 (25.4%)     40 (30.3%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
cl B.1                                                              
  dcd B.1.1.1.1             38 (28.4%)   37 (27.6%)     36 (27.3%)  
cl C.1                                                              
  dcd C.1.1.1.3             36 (26.9%)   34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fractions_difference(
  atleast = 0.05,
  col_names = levels(adsl$ACTARM)
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_cols(
  atleast = 0.05,
  col_names = c("B: Placebo")
)
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
  dcd A.1.1.1.2             41 (30.6%)   39 (29.1%)     42 (31.8%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
  dcd D.1.1.4.2             38 (28.4%)   34 (25.4%)     40 (30.3%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
cl B.1                                                              
  dcd B.1.1.1.1             38 (28.4%)   37 (27.6%)     36 (27.3%)  
cl C.1                                                              
  dcd C.1.1.1.3             36 (26.9%)   34 (25.4%)     36 (27.3%)  
Experimental 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 = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition1 <- has_fractions_difference(atleast = 0.05, col_names = c("A: Drug X", "B: Placebo"))
row_condition2 <- has_fractions_difference(atleast = 0.05, col_names = c("A: Drug X", "C: Combination"))
row_condition <- row_condition1 | row_condition2
result <- prune_table(result, keep_rows(row_condition))

result
MedDRA System Organ Class   A: Drug X    B: Placebo   C: Combination
  MedDRA Preferred Term      (N=134)      (N=134)        (N=132)    
————————————————————————————————————————————————————————————————————
cl A.1                                                              
  dcd A.1.1.1.1             45 (33.6%)   31 (23.1%)     52 (39.4%)  
cl B.2                                                              
  dcd B.2.2.3.1             38 (28.4%)   40 (29.9%)     45 (34.1%)  
  dcd B.2.1.2.1             39 (29.1%)   34 (25.4%)     46 (34.8%)  
cl D.1                                                              
  dcd D.1.1.1.1             42 (31.3%)   32 (23.9%)     46 (34.8%)  
cl D.2                                                              
  dcd D.2.1.5.3             37 (27.6%)   46 (34.3%)     50 (37.9%)  
cl C.2                                                              
  dcd C.2.1.2.1             28 (20.9%)   36 (26.9%)     48 (36.4%)  
Experimental 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) %>%
  var_relabel(
    AEBODSYS = "MedDRA System Organ Class",
    AEDECOD = "MedDRA Preferred Term"
  ) %>%
  filter(ANL01FL == "Y")

# Define the split function
split_fun <- drop_split_levels

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)
})
datanames <- c("ADSL", "ADAE")
datanames(data) <- datanames
Warning: `datanames<-()` was deprecated in teal.data 0.7.0.
ℹ invalid to use `datanames()<-` or `names()<-` on an object of class
  `teal_data`. See ?names.teal_data
Code
join_keys(data) <- default_cdisc_join_keys[datanames]

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

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Event Table",
      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", "AESOC")),
        selected = "AEBODSYS"
      ),
      add_total = TRUE,
      event_type = "adverse event"
    )
  )
)

shinyApp(app$ui, app$server)

Experimental 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)
})
datanames <- c("ADSL", "ADAE")
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

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

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Event Table",
      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", "AESOC")),
        selected = "AEBODSYS"
      ),
      add_total = TRUE,
      event_type = "adverse event"
    )
  )
)

shinyApp(app$ui, app$server)

Reproducibility

Timestamp

[1] "2025-07-09 18:04:18 UTC"

Session Info

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.0 (2025-04-11)
 os       Ubuntu 24.04.2 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Etc/UTC
 date     2025-07-09
 pandoc   3.7.0.2 @ /usr/bin/ (via rmarkdown)
 quarto   1.7.32 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package               * version  date (UTC) lib source
 backports               1.5.0    2024-05-23 [1] RSPM
 brio                    1.1.5    2024-04-24 [1] RSPM
 broom                   1.0.8    2025-03-28 [1] RSPM
 bslib                   0.9.0    2025-01-30 [1] RSPM
 cachem                  1.1.0    2024-05-16 [1] RSPM
 callr                   3.7.6    2024-03-25 [1] RSPM
 checkmate               2.3.2    2024-07-29 [1] RSPM
 chromote                0.5.1    2025-04-24 [1] RSPM
 cli                     3.6.5    2025-04-23 [1] RSPM
 coda                    0.19-4.1 2024-01-31 [1] CRAN (R 4.5.0)
 codetools               0.2-20   2024-03-31 [2] CRAN (R 4.5.0)
 curl                    6.4.0    2025-06-22 [1] RSPM
 dichromat               2.0-0.1  2022-05-02 [1] CRAN (R 4.5.0)
 digest                  0.6.37   2024-08-19 [1] RSPM
 dplyr                 * 1.1.4    2023-11-17 [1] RSPM
 emmeans                 1.11.1   2025-05-04 [1] RSPM
 estimability            1.5.1    2024-05-12 [1] RSPM
 evaluate                1.0.4    2025-06-18 [1] RSPM
 farver                  2.1.2    2024-05-13 [1] RSPM
 fastmap                 1.2.0    2024-05-15 [1] RSPM
 fontawesome             0.5.3    2024-11-16 [1] RSPM
 forcats                 1.0.0    2023-01-29 [1] RSPM
 formatR                 1.14     2023-01-17 [1] CRAN (R 4.5.0)
 formatters            * 0.5.11   2025-04-09 [1] RSPM
 geepack                 1.3.12   2024-09-23 [1] RSPM
 generics                0.1.4    2025-05-09 [1] RSPM
 ggplot2                 3.5.2    2025-04-09 [1] RSPM
 glue                    1.8.0    2024-09-30 [1] RSPM
 gtable                  0.3.6    2024-10-25 [1] RSPM
 htmltools               0.5.8.1  2024-04-04 [1] RSPM
 htmlwidgets             1.6.4    2023-12-06 [1] RSPM
 httpuv                  1.6.16   2025-04-16 [1] RSPM
 jquerylib               0.1.4    2021-04-26 [1] RSPM
 jsonlite                2.0.0    2025-03-27 [1] RSPM
 knitr                   1.50     2025-03-16 [1] RSPM
 later                   1.4.2    2025-04-08 [1] RSPM
 lattice                 0.22-7   2025-04-02 [2] CRAN (R 4.5.0)
 lifecycle               1.0.4    2023-11-07 [1] RSPM
 logger                  0.4.0    2024-10-22 [1] RSPM
 magrittr              * 2.0.3    2022-03-30 [1] RSPM
 MASS                    7.3-65   2025-02-28 [2] CRAN (R 4.5.0)
 Matrix                  1.7-3    2025-03-11 [1] CRAN (R 4.5.0)
 memoise                 2.0.1    2021-11-26 [1] RSPM
 mime                    0.13     2025-03-17 [1] RSPM
 multcomp                1.4-28   2025-01-29 [1] RSPM
 mvtnorm                 1.3-3    2025-01-10 [1] RSPM
 nestcolor               0.1.3    2025-01-21 [1] RSPM
 nlme                    3.1-168  2025-03-31 [2] CRAN (R 4.5.0)
 pillar                  1.11.0   2025-07-04 [1] RSPM
 pkgcache                2.2.4    2025-05-26 [1] RSPM
 pkgconfig               2.0.3    2019-09-22 [1] RSPM
 processx                3.8.6    2025-02-21 [1] RSPM
 promises                1.3.3    2025-05-29 [1] RSPM
 ps                      1.9.1    2025-04-12 [1] RSPM
 purrr                   1.0.4    2025-02-05 [1] RSPM
 R6                      2.6.1    2025-02-15 [1] RSPM
 random.cdisc.data       0.3.16   2024-10-10 [1] RSPM
 rbibutils               2.3      2024-10-04 [1] RSPM
 RColorBrewer            1.1-3    2022-04-03 [1] RSPM
 Rcpp                    1.1.0    2025-07-02 [1] RSPM
 Rdpack                  2.6.4    2025-04-09 [1] RSPM
 rlang                   1.1.6    2025-04-11 [1] RSPM
 rmarkdown               2.29     2024-11-04 [1] RSPM
 rtables               * 0.6.13   2025-06-19 [1] RSPM
 sandwich                3.1-1    2024-09-15 [1] RSPM
 sass                    0.4.10   2025-04-11 [1] RSPM
 scales                  1.4.0    2025-04-24 [1] RSPM
 sessioninfo             1.2.3    2025-02-05 [1] any (@1.2.3)
 shiny                 * 1.11.1   2025-07-03 [1] RSPM
 shinycssloaders         1.1.0    2024-07-30 [1] RSPM
 shinyjs                 2.1.0    2021-12-23 [1] RSPM
 shinyvalidate           0.1.3    2023-10-04 [1] RSPM
 shinyWidgets            0.9.0    2025-02-21 [1] RSPM
 stringi                 1.8.7    2025-03-27 [1] RSPM
 stringr                 1.5.1    2023-11-14 [1] RSPM
 survival                3.8-3    2024-12-17 [2] CRAN (R 4.5.0)
 teal                  * 0.16.0   2025-02-23 [1] RSPM
 teal.code             * 0.6.1    2025-02-14 [1] RSPM
 teal.data             * 0.7.0    2025-01-28 [1] RSPM
 teal.logger             0.4.0    2025-07-08 [1] RSPM
 teal.modules.clinical * 0.10.0   2025-02-28 [1] RSPM
 teal.reporter           0.4.0    2025-01-24 [1] RSPM
 teal.slice            * 0.6.0    2025-02-03 [1] RSPM
 teal.transform        * 0.6.0    2025-02-12 [1] RSPM
 teal.widgets            0.4.3    2025-01-31 [1] RSPM
 tern                  * 0.9.9    2025-06-20 [1] RSPM
 tern.gee                0.1.5    2024-08-23 [1] RSPM
 testthat                3.2.3    2025-01-13 [1] RSPM
 TH.data                 1.1-3    2025-01-17 [1] RSPM
 tibble                  3.3.0    2025-06-08 [1] RSPM
 tidyr                   1.3.1    2024-01-24 [1] RSPM
 tidyselect              1.2.1    2024-03-11 [1] RSPM
 vctrs                   0.6.5    2023-12-01 [1] RSPM
 webshot                 0.5.5    2023-06-26 [1] CRAN (R 4.5.0)
 webshot2                0.1.2    2025-04-23 [1] RSPM
 websocket               1.4.4    2025-04-10 [1] RSPM
 withr                   3.0.2    2024-10-28 [1] RSPM
 xfun                    0.52     2025-04-02 [1] RSPM
 xtable                  1.8-4    2019-04-21 [1] RSPM
 yaml                    2.3.10   2024-07-26 [1] RSPM
 zoo                     1.8-14   2025-04-10 [1] RSPM

 [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

AET01_AESI
AET02_SMQ
Source Code
---
title: AET02
subtitle: Adverse Events
---

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

{{< 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) %>%
  var_relabel(
    AEBODSYS = "MedDRA System Organ Class",
    AEDECOD = "MedDRA Preferred Term"
  ) %>%
  filter(ANL01FL == "Y")

# Define the split function
split_fun <- drop_split_levels
```

```{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")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  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",
      nonunique = "Overall total number of events"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    )
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = -1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl)
result
```

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

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

The variable `result` corresponds to the adverse events table. However, it includes many empty rows accounting for events which were not reported. The table can be post-processed to prune empty rows and to sort rows, for example by occurrence.

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

```{r variant2, test = list(result_v2 = "result")}
result <- result %>%
  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", "variant2")
```

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

## Table with <br/> Event Totals

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

```{r variant3, test = list(result_v3 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  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",
      nonunique = "Overall total number of events"
    )
  ) %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = c("unique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event"
    )
  ) %>%
  count_occurrences(vars = "AEDECOD", .indent_mods = -1L) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L) %>%
  count_values(
    "STUDYID",
    values = as.character(unique(adae$STUDYID)),
    .stats = "count",
    .labels = c(count = "Total number of events"),
    .indent_mods = c(count = -1L)
  )

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  ) %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  )

result
```

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

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

## Table with <br/> High-Level Term

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

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

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  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("variant4")
```

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

## Table with Preferred <br/> Terms Only

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

```{r variant5, test = list(result_v5 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  analyze_num_patients(
    vars = "USUBJID",
    .stats = c("unique", "nonunique"),
    .labels = c(
      unique = "Total number of patients with at least one adverse event",
      nonunique = "Total number of events"
    ),
    show_labels = "hidden"
  ) %>%
  count_occurrences(vars = "AEDECOD") %>%
  append_varlabels(adae, "AEDECOD")

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  sort_at_path(
    path = c("AEDECOD"),
    scorefun = score_occurrences
  )

result
```

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

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

## Table with Fill-In of <br/> Treatment Groups

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

```{r variant6, test = list(result_v6 = "result")}
adae_5 <- adae %>% dplyr::filter(ACTARM != "C: Combination")

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

result <- build_table(lyt, df = adae_5, alt_counts_df = adsl) %>%
  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("variant6")
```

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

## Table of AEs with an Incidence Rate <br/> $\geq$ 5% in Any Treatment Group (subsetting <br/> preferred terms based on frequency)

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

```{r variant7, test = list(result_v7 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.05,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with an Incidence Rate $\geq$ 5% in <br/> Any Treatment Group (subsetting preferred terms <br/> based on frequency with high-level terms)

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

```{r variant8, test = list(result_v8 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = TRUE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  split_rows_by(
    "AEHLT",
    child_labels = "visible",
    nested = TRUE,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEHLT)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(vars = "AEDECOD") %>%
  append_varlabels(adae, c("AEDECOD"), indent = 2L)

result <- build_table(lyt, adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols,
    decreasing = TRUE
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT"),
    scorefun = cont_n_allcols,
    decreasing = TRUE
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEHLT", "*", "AEDECOD"),
    scorefun = score_occurrences,
    decreasing = TRUE
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.05,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with an Incidence Rate $\geq$ 10% <br/> in Any Treatment Group (subsetting <br/> preferred terms based on frequency)

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

```{r variant9, test = list(result_v9 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_any_col(
  atleast = 0.10,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with an Incidence Rate $\geq$ 3 <br/> Patients in Any Treatment Group (subsetting <br/> preferred terms based on number of patients)

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

```{r variant10, test = list(result_v10 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    split_label = obj_label(adae$AEBODSYS),
    label_pos = "topleft"
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_count_in_any_col(
  atleast = 3,
  col_names = names(table(adsl$ACTARM))
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with a Difference in Incidence Rate $\geq$ 5% <br/> Between Any Treatment (subsetting preferred terms based <br/> on difference in percentage between treatment groups)

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

```{r variant11, test = list(result_v11 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fractions_difference(
  atleast = 0.05,
  col_names = levels(adsl$ACTARM)
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with an Incidence Rate $\geq$ 5% <br/> in B: Placebo (subsetting preferred terms based <br/> on frequency for a particular treatment group)

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

```{r variant12, test = list(result_v12 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition <- has_fraction_in_cols(
  atleast = 0.05,
  col_names = c("B: Placebo")
)
result <- prune_table(result, keep_rows(row_condition))

result
```

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

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

## Table of AEs with a Difference in Incidence Rate $\geq$ 5% Between <br/> Arm A and Arm B or Arm C (displaying preferred terms with a <br/> difference of at least x% between selected treatment groups)

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

```{r variant13, test = list(result_v13 = "result")}
lyt <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by(var = "ACTARM") %>%
  split_rows_by(
    "AEBODSYS",
    child_labels = "visible",
    nested = FALSE,
    indent_mod = -1L,
    split_fun = split_fun,
    label_pos = "topleft",
    split_label = obj_label(adae$AEBODSYS)
  ) %>%
  summarize_num_patients(
    var = "USUBJID",
    .stats = "unique",
    .labels = "Total number of patients with at least one adverse event"
  ) %>%
  count_occurrences(
    vars = "AEDECOD",
    .indent_mods = 1L
  ) %>%
  append_varlabels(adae, "AEDECOD", indent = 1L)

result <- build_table(lyt, df = adae, alt_counts_df = adsl) %>%
  prune_table() %>%
  sort_at_path(
    path = c("AEBODSYS"),
    scorefun = cont_n_allcols
  ) %>%
  sort_at_path(
    path = c("AEBODSYS", "*", "AEDECOD"),
    scorefun = score_occurrences
  )

criteria_fun <- function(tr) is(tr, "ContentRow")
result <- trim_rows(result, criteria = criteria_fun)

row_condition1 <- has_fractions_difference(atleast = 0.05, col_names = c("A: Drug X", "B: Placebo"))
row_condition2 <- has_fractions_difference(atleast = 0.05, col_names = c("A: Drug X", "C: Combination"))
row_condition <- row_condition1 | row_condition2
result <- prune_table(result, keep_rows(row_condition))

result
```

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

{{< 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)
})
datanames <- c("ADSL", "ADAE")
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

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

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_events(
      label = "Adverse Event Table",
      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", "AESOC")),
        selected = "AEBODSYS"
      ),
      add_total = TRUE,
      event_type = "adverse event"
    )
  )
)

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