
Generate an Interactive AE Listing Table with reactable
Source:vignettes/ae-listing-reactable.Rmd
ae-listing-reactable.RmdOverview
This vignette demonstrates how to generate an interactive adverse
event (AE) listing focused on drug-related AEs using
metalite.ae.
The listing presents participant-level details for drug-related AEs. Three functions support the workflow:
-
prepare_ae_listing()prepares the listing dataset. -
format_ae_listing()organizes the listing output. -
react_ae_listing()creates an interactive listing table.
In the interactive table, each column has its own filter box so users can quickly search for participants or events of interest.
Step 1: Define metadata
The example uses ADSL and ADAE data from the forestly package.
adsl <- forestly::forestly_adsl
adae <- forestly::forestly_adae
adsl$TRT01A <- factor(
adsl$TRT01A,
levels = c("Xanomeline Low Dose", "Placebo"),
labels = c("Low Dose", "Placebo")
)
adae$TRTA <- factor(
adae$TRTA,
levels = c("Xanomeline Low Dose", "Placebo"),
labels = c("Low Dose", "Placebo")
)
analysis_plan <- metalite::plan(
analysis = "ae_listing",
population = "apat",
observation = "wk12",
parameter = "rel"
)
meta <- metalite::meta_adam(observation = adae, population = adsl) |>
metalite::define_plan(analysis_plan) |>
metalite::define_population(
name = "apat",
var = c(
"USUBJID", "SAFFL", "TRT01A", "TRTDUR",
"SITEID", "SEX", "RACE", "AGE"
),
group = "TRT01A",
subset = SAFFL == "Y",
label = "All Participants as Treated"
) |>
metalite::define_observation(
name = "wk12",
var = c(
"USUBJID", "SAFFL", "TRTA", "AEDECOD", "AEBODSYS", "AEREL",
"AESER", "AEOUT", "AEACN", "AESDTH", "ASTDT", "AENDT"
),
group = "TRTA",
subset = SAFFL == "Y",
label = "Weeks 0 to 12"
) |>
metalite::define_parameter(
name = "rel",
term1 = "Related",
term2 = "",
subset = AREL == "RELATED",
var = "AEDECOD",
soc = "AEBODSYS",
label = "Related AEs"
) |>
metalite::define_analysis(
name = "ae_listing",
var_name = c(
"USUBJID", "ASTDY", "AEDECOD", "ADURN",
"AESEV", "AESER", "AEREL", "AEOUT"
),
group_by = c("USUBJID", "ASTDY"),
page_by = "TRTA"
) |>
metalite::meta_build()Step 2: Generate an interactive AE listing table
prepare_ae_listing() uses the population, observation,
parameter, and analysis definitions in meta to prepare the
listing dataset. format_ae_listing() organizes the table,
and react_ae_listing() creates an interactive view.
prepare_ae_listing(
meta,
analysis = "ae_listing",
population = "apat",
observation = "wk12",
parameter = "rel"
) |>
format_ae_listing() |>
react_ae_listing(
default_page_size = 15,
patient_folding = FALSE
)Use patient_folding = TRUE when reviewers should only
see records for a specific participant after entering the exact full ID
in the first-column search box. This mode is useful for
privacy-conscious review workflows, focused medical review, or meetings
where you want to avoid showing all participants by default. In this
setting, the table starts empty and displays records only when a full,
valid patient ID is provided.
prepare_ae_listing(
meta,
analysis = "ae_listing",
population = "apat",
observation = "wk12",
parameter = "rel"
) |>
format_ae_listing() |>
react_ae_listing(
default_page_size = 15,
patient_folding = TRUE
)