TLG Catalog - Stable
  • Stable
    • Dev
  1. Tables
  2. Lab Results
  3. LBT09
  • 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
  • Reproducibility
    • Timestamp
    • Session Info
    • .lock file
  • Edit this page
  • Report an issue
  1. Tables
  2. Lab Results
  3. LBT09

LBT09

Liver Laboratory Tests – Patients with Elevated Post-Baseline AST or ALT Levels


Output

  • Standard Table
  • Table Selecting Sections
  • Data Setup
  • Preview
  • Try this using WebR
Code
result <- basic_table() %>%
  split_cols_by("ARM") %>%
  split_cols_by("AVISIT") %>%
  split_rows_by("TBILI_CAT") %>%
  # below split helps us get the right denominator between ALT/AST but it can be hidden
  split_rows_by("ALTAST_ind", split_fun = trim_levels_to_map(map), child_labels = "hidden") %>%
  count_occurrences(
    vars = "ALTAST_CAT",
    .stats = "fraction",
    denom = "n",
    drop = FALSE
  ) %>%
  append_topleft("Liver Laboratory Test Criterion") %>%
  build_table(df = adhy_liver)

# trim away rows with criteria not met
criteria_fun <- function(tr) {
  row_label <- obj_label(tr)
  ifelse(row_label == "Criteria not met", TRUE, FALSE)
}

result <- result %>% trim_rows(criteria = criteria_fun)
result
                                                                       A: Drug X                        B: Placebo                      C: Combination         
Liver Laboratory Test Criterion                                BASELINE      POST-BASELINE       BASELINE      POST-BASELINE       BASELINE      POST-BASELINE 
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total Bilirubin <= 2xULN                                                                                                                                       
  ALT >3 - <= 5xULN                                         23/134 (17.2%)   15/134 (11.2%)   25/134 (18.7%)   27/134 (20.1%)   27/132 (20.5%)   30/132 (22.7%)
  ALT >5 - <= 10xULN                                        28/134 (20.9%)   29/134 (21.6%)   29/134 (21.6%)   19/134 (14.2%)   36/132 (27.3%)   29/132 (22.0%)
  ALT >10 - <= 20xULN                                       24/134 (17.9%)   30/134 (22.4%)   32/134 (23.9%)   33/134 (24.6%)   28/132 (21.2%)   24/132 (18.2%)
  ALT > 20xULN                                              32/134 (23.9%)   35/134 (26.1%)   24/134 (17.9%)   23/134 (17.2%)   20/132 (15.2%)   26/132 (19.7%)
  AST >3 - <= 5xULN                                         31/134 (23.1%)   34/134 (25.4%)   30/134 (22.4%)   26/134 (19.4%)   34/132 (25.8%)   24/132 (18.2%)
  AST >5 - <= 10xULN                                        25/134 (18.7%)   25/134 (18.7%)   26/134 (19.4%)   26/134 (19.4%)   22/132 (16.7%)   27/132 (20.5%)
  AST >10 - <= 20xULN                                       22/134 (16.4%)   29/134 (21.6%)   16/134 (11.9%)   22/134 (16.4%)   34/132 (25.8%)   19/132 (14.4%)
  AST > 20xULN                                              20/134 (14.9%)   16/134 (11.9%)   28/134 (20.9%)   31/134 (23.1%)   21/132 (15.9%)   39/132 (29.5%)
Total Bilirubin > 2xULN                                                                                                                                        
  ALT >3 - <= 5xULN                                         40/134 (29.9%)   28/134 (20.9%)   31/134 (23.1%)   28/134 (20.9%)   18/132 (13.6%)   32/132 (24.2%)
  ALT >5 - <= 10xULN                                        24/134 (17.9%)   29/134 (21.6%)   30/134 (22.4%)   37/134 (27.6%)   33/132 (25.0%)   24/132 (18.2%)
  ALT >10 - <= 20xULN                                       24/134 (17.9%)   22/134 (16.4%)   26/134 (19.4%)   18/134 (13.4%)   21/132 (15.9%)   30/132 (22.7%)
  ALT > 20xULN                                              19/134 (14.2%)   33/134 (24.6%)   23/134 (17.2%)   19/134 (14.2%)   30/132 (22.7%)   22/132 (16.7%)
  AST >3 - <= 5xULN                                         17/134 (12.7%)   27/134 (20.1%)   36/134 (26.9%)   25/134 (18.7%)   26/132 (19.7%)   34/132 (25.8%)
  AST >5 - <= 10xULN                                        25/134 (18.7%)   28/134 (20.9%)   24/134 (17.9%)   28/134 (20.9%)   20/132 (15.2%)   23/132 (17.4%)
  AST >10 - <= 20xULN                                       36/134 (26.9%)   28/134 (20.9%)   16/134 (11.9%)   26/134 (19.4%)   33/132 (25.0%)   26/132 (19.7%)
  AST > 20xULN                                              30/134 (22.4%)   21/134 (15.7%)   30/134 (22.4%)   24/134 (17.9%)   24/132 (18.2%)   25/132 (18.9%)
Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN                                                                                                      
  ALT >3 - <= 5xULN                                         24/134 (17.9%)   22/134 (16.4%)   28/134 (20.9%)   23/134 (17.2%)   38/132 (28.8%)   23/132 (17.4%)
  ALT >5 - <= 10xULN                                        26/134 (19.4%)   25/134 (18.7%)   19/134 (14.2%)   22/134 (16.4%)   32/132 (24.2%)   32/132 (24.2%)
  ALT >10 - <= 20xULN                                       26/134 (19.4%)   30/134 (22.4%)   31/134 (23.1%)   30/134 (22.4%)   21/132 (15.9%)   27/132 (20.5%)
  ALT > 20xULN                                              30/134 (22.4%)   28/134 (20.9%)   24/134 (17.9%)   36/134 (26.9%)   20/132 (15.2%)   23/132 (17.4%)
  AST >3 - <= 5xULN                                         37/134 (27.6%)   25/134 (18.7%)   31/134 (23.1%)   26/134 (19.4%)   24/132 (18.2%)   36/132 (27.3%)
  AST >5 - <= 10xULN                                        25/134 (18.7%)   32/134 (23.9%)   29/134 (21.6%)   30/134 (22.4%)   26/132 (19.7%)   24/132 (18.2%)
  AST >10 - <= 20xULN                                       25/134 (18.7%)   31/134 (23.1%)   28/134 (20.9%)   22/134 (16.4%)   29/132 (22.0%)   23/132 (17.4%)
  AST > 20xULN                                              26/134 (19.4%)   25/134 (18.7%)   23/134 (17.2%)   30/134 (22.4%)   23/132 (17.4%)   24/132 (18.2%)
Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN                                                                                                      
  ALT >3 - <= 5xULN                                         24/134 (17.9%)   21/134 (15.7%)   30/134 (22.4%)   17/134 (12.7%)   28/132 (21.2%)   31/132 (23.5%)
  ALT >5 - <= 10xULN                                        36/134 (26.9%)   28/134 (20.9%)   25/134 (18.7%)   27/134 (20.1%)   26/132 (19.7%)   29/132 (22.0%)
  ALT >10 - <= 20xULN                                       30/134 (22.4%)   21/134 (15.7%)   28/134 (20.9%)   36/134 (26.9%)   25/132 (18.9%)   24/132 (18.2%)
  ALT > 20xULN                                              14/134 (10.4%)   28/134 (20.9%)   25/134 (18.7%)   27/134 (20.1%)   31/132 (23.5%)   23/132 (17.4%)
  AST >3 - <= 5xULN                                         21/134 (15.7%)   26/134 (19.4%)   29/134 (21.6%)   31/134 (23.1%)   33/132 (25.0%)   19/132 (14.4%)
  AST >5 - <= 10xULN                                        29/134 (21.6%)   26/134 (19.4%)   24/134 (17.9%)   26/134 (19.4%)   23/132 (17.4%)   32/132 (24.2%)
  AST >10 - <= 20xULN                                       29/134 (21.6%)   31/134 (23.1%)   28/134 (20.9%)   22/134 (16.4%)   22/132 (16.7%)   21/132 (15.9%)
  AST > 20xULN                                              34/134 (25.4%)   21/134 (15.7%)   19/134 (14.2%)   28/134 (20.9%)   21/132 (15.9%)   33/132 (25.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
result <- basic_table() %>%
  split_cols_by("ARM") %>%
  split_cols_by("AVISIT") %>%
  split_rows_by(
    "TBILI_CAT",
    split_fun = remove_split_levels("Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN")
  ) %>%
  # below split helps us get the right denominator between ALT/AST but it can be hidden
  split_rows_by(
    "ALTAST_ind",
    split_fun = trim_levels_to_map(map), child_labels = "hidden"
  ) %>%
  count_occurrences(
    vars = "ALTAST_CAT",
    .stats = "fraction",
    denom = "n",
    drop = FALSE
  ) %>%
  append_topleft("Liver Laboratory Test Criterion") %>%
  build_table(df = adhy_liver)

# trim away rows with criteria not met
criteria_fun <- function(tr) {
  row_label <- obj_label(tr)
  ifelse(row_label == "Criteria not met", TRUE, FALSE)
}

result <- result %>% trim_rows(criteria = criteria_fun)
result
                                                                       A: Drug X                        B: Placebo                      C: Combination         
Liver Laboratory Test Criterion                                BASELINE      POST-BASELINE       BASELINE      POST-BASELINE       BASELINE      POST-BASELINE 
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Total Bilirubin <= 2xULN                                                                                                                                       
  ALT >3 - <= 5xULN                                         23/134 (17.2%)   15/134 (11.2%)   25/134 (18.7%)   27/134 (20.1%)   27/132 (20.5%)   30/132 (22.7%)
  ALT >5 - <= 10xULN                                        28/134 (20.9%)   29/134 (21.6%)   29/134 (21.6%)   19/134 (14.2%)   36/132 (27.3%)   29/132 (22.0%)
  ALT >10 - <= 20xULN                                       24/134 (17.9%)   30/134 (22.4%)   32/134 (23.9%)   33/134 (24.6%)   28/132 (21.2%)   24/132 (18.2%)
  ALT > 20xULN                                              32/134 (23.9%)   35/134 (26.1%)   24/134 (17.9%)   23/134 (17.2%)   20/132 (15.2%)   26/132 (19.7%)
  AST >3 - <= 5xULN                                         31/134 (23.1%)   34/134 (25.4%)   30/134 (22.4%)   26/134 (19.4%)   34/132 (25.8%)   24/132 (18.2%)
  AST >5 - <= 10xULN                                        25/134 (18.7%)   25/134 (18.7%)   26/134 (19.4%)   26/134 (19.4%)   22/132 (16.7%)   27/132 (20.5%)
  AST >10 - <= 20xULN                                       22/134 (16.4%)   29/134 (21.6%)   16/134 (11.9%)   22/134 (16.4%)   34/132 (25.8%)   19/132 (14.4%)
  AST > 20xULN                                              20/134 (14.9%)   16/134 (11.9%)   28/134 (20.9%)   31/134 (23.1%)   21/132 (15.9%)   39/132 (29.5%)
Total Bilirubin > 2xULN                                                                                                                                        
  ALT >3 - <= 5xULN                                         40/134 (29.9%)   28/134 (20.9%)   31/134 (23.1%)   28/134 (20.9%)   18/132 (13.6%)   32/132 (24.2%)
  ALT >5 - <= 10xULN                                        24/134 (17.9%)   29/134 (21.6%)   30/134 (22.4%)   37/134 (27.6%)   33/132 (25.0%)   24/132 (18.2%)
  ALT >10 - <= 20xULN                                       24/134 (17.9%)   22/134 (16.4%)   26/134 (19.4%)   18/134 (13.4%)   21/132 (15.9%)   30/132 (22.7%)
  ALT > 20xULN                                              19/134 (14.2%)   33/134 (24.6%)   23/134 (17.2%)   19/134 (14.2%)   30/132 (22.7%)   22/132 (16.7%)
  AST >3 - <= 5xULN                                         17/134 (12.7%)   27/134 (20.1%)   36/134 (26.9%)   25/134 (18.7%)   26/132 (19.7%)   34/132 (25.8%)
  AST >5 - <= 10xULN                                        25/134 (18.7%)   28/134 (20.9%)   24/134 (17.9%)   28/134 (20.9%)   20/132 (15.2%)   23/132 (17.4%)
  AST >10 - <= 20xULN                                       36/134 (26.9%)   28/134 (20.9%)   16/134 (11.9%)   26/134 (19.4%)   33/132 (25.0%)   26/132 (19.7%)
  AST > 20xULN                                              30/134 (22.4%)   21/134 (15.7%)   30/134 (22.4%)   24/134 (17.9%)   24/132 (18.2%)   25/132 (18.9%)
Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN                                                                                                      
  ALT >3 - <= 5xULN                                         24/134 (17.9%)   21/134 (15.7%)   30/134 (22.4%)   17/134 (12.7%)   28/132 (21.2%)   31/132 (23.5%)
  ALT >5 - <= 10xULN                                        36/134 (26.9%)   28/134 (20.9%)   25/134 (18.7%)   27/134 (20.1%)   26/132 (19.7%)   29/132 (22.0%)
  ALT >10 - <= 20xULN                                       30/134 (22.4%)   21/134 (15.7%)   28/134 (20.9%)   36/134 (26.9%)   25/132 (18.9%)   24/132 (18.2%)
  ALT > 20xULN                                              14/134 (10.4%)   28/134 (20.9%)   25/134 (18.7%)   27/134 (20.1%)   31/132 (23.5%)   23/132 (17.4%)
  AST >3 - <= 5xULN                                         21/134 (15.7%)   26/134 (19.4%)   29/134 (21.6%)   31/134 (23.1%)   33/132 (25.0%)   19/132 (14.4%)
  AST >5 - <= 10xULN                                        29/134 (21.6%)   26/134 (19.4%)   24/134 (17.9%)   26/134 (19.4%)   23/132 (17.4%)   32/132 (24.2%)
  AST >10 - <= 20xULN                                       29/134 (21.6%)   31/134 (23.1%)   28/134 (20.9%)   22/134 (16.4%)   22/132 (16.7%)   21/132 (15.9%)
  AST > 20xULN                                              34/134 (25.4%)   21/134 (15.7%)   19/134 (14.2%)   28/134 (20.9%)   21/132 (15.9%)   33/132 (25.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.

Code
library(dplyr)
library(tern)

adhy <- random.cdisc.data::cadhy

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

# Define values of interest in PARAMCD variable.
paramcd_tbili_alt <- c("BLAL", "BGAL", "BA2AL", "BA5AL")
paramcd_tbili_ast <- c("BLAS", "BGAS", "BA2AS", "BA5AS")

# Select LBT09 parameters.
adhy_liver <- adhy_liver %>%
  filter(
    SAFFL == "Y",
    AVISIT %in% c("BASELINE", "POST-BASELINE"),
    PARAMCD %in% c(paramcd_tbili_alt, paramcd_tbili_ast)
  )

# Let's be explicit about factor levels for AVISIT and PARAMCD.
adhy_liver <- adhy_liver %>%
  mutate(
    AVISIT = factor(AVISIT, levels = c("BASELINE", "POST-BASELINE")),
    PARAMCD = factor(PARAMCD, levels = c(paramcd_tbili_alt, paramcd_tbili_ast))
  )

# Create indicator and category variables.
adhy_liver <- adhy_liver %>%
  mutate(
    # Create TBILI_CAT categories variable - this is needed so we get the right nesting in the table.
    TBILI_CAT = factor(
      case_when(
        PARAMCD %in% c(paramcd_tbili_alt[1], paramcd_tbili_ast[1]) ~ "Total Bilirubin <= 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[2], paramcd_tbili_ast[2]) ~ "Total Bilirubin > 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[3], paramcd_tbili_ast[3]) ~
          "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[4], paramcd_tbili_ast[4]) ~
          "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN"
      ),
      levels = c(
        "Total Bilirubin <= 2xULN",
        "Total Bilirubin > 2xULN",
        "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN",
        "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN"
      )
    ),
    # Create ALTAST_CAT categories variable
    # this will be the labels for different ALT/AST categories displayed in the table.
    ALTAST_CAT = factor(
      case_when(
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">3-5ULN" ~ "ALT >3 - <= 5xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">5-10ULN" ~ "ALT >5 - <= 10xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">10-20ULN" ~ "ALT >10 - <= 20xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">20ULN" ~ "ALT > 20xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">3-5ULN" ~ "AST >3 - <= 5xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">5-10ULN" ~ "AST >5 - <= 10xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">10-20ULN" ~ "AST >10 - <= 20xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">20ULN" ~ "AST > 20xULN",
        TRUE ~ "Criteria not met"
      ),
      levels = c(
        "ALT >3 - <= 5xULN", "ALT >5 - <= 10xULN", "ALT >10 - <= 20xULN",
        "20" = "ALT > 20xULN",
        "AST >3 - <= 5xULN", "AST >5 - <= 10xULN", "AST >10 - <= 20xULN", "AST > 20xULN",
        "Criteria not met"
      )
    ),
    ALTAST_ind = factor(
      case_when(
        PARAMCD %in% paramcd_tbili_alt ~ "ALT",
        PARAMCD %in% paramcd_tbili_ast ~ "AST"
      ),
      levels = c("ALT", "AST")
    )
  )

map <- data.frame(
  ALTAST_ind = c(rep("ALT", 5), rep("AST", 5)),
  ALTAST_CAT = c(
    "ALT >3 - <= 5xULN", "ALT >5 - <= 10xULN", "ALT >10 - <= 20xULN",
    "20" = "ALT > 20xULN", "Criteria not met",
    "AST >3 - <= 5xULN", "AST >5 - <= 10xULN", "AST >10 - <= 20xULN", "AST > 20xULN", "Criteria not met"
  ),
  stringsAsFactors = FALSE
)

Reproducibility

Timestamp

[1] "2025-08-20 17:56:30 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-08-20
 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.9   2025-07-28 [1] RSPM
 checkmate           2.3.3   2025-08-18 [1] RSPM
 cli                 3.6.5   2025-04-23 [1] RSPM
 codetools           0.2-20  2024-03-31 [2] CRAN (R 4.5.0)
 curl                7.0.0   2025-08-19 [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
 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
 forcats             1.0.0   2023-01-29 [1] RSPM
 formatters        * 0.5.11  2025-04-09 [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
 jsonlite            2.0.0   2025-03-27 [1] RSPM
 knitr               1.50    2025-03-16 [1] RSPM
 lattice             0.22-7  2025-04-02 [2] CRAN (R 4.5.0)
 lifecycle           1.0.4   2023-11-07 [1] RSPM
 magrittr          * 2.0.3   2022-03-30 [1] RSPM
 Matrix              1.7-3   2025-03-11 [1] CRAN (R 4.5.0)
 nestcolor           0.1.3   2025-01-21 [1] RSPM
 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
 ps                  1.9.1   2025-04-12 [1] RSPM
 purrr               1.1.0   2025-07-10 [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
 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
 scales              1.4.0   2025-04-24 [1] RSPM
 sessioninfo         1.2.3   2025-02-05 [1] any (@1.2.3)
 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)
 tern              * 0.9.9   2025-06-20 [1] RSPM
 testthat            3.2.3   2025-01-13 [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
 xfun                0.53    2025-08-19 [1] RSPM
 yaml                2.3.10  2024-07-26 [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

LBT08
LBT10
Source Code
---
title: LBT09
subtitle: Liver Laboratory Tests -- Patients with Elevated Post-Baseline AST or ALT Levels
---

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

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

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

adhy <- random.cdisc.data::cadhy

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

# Define values of interest in PARAMCD variable.
paramcd_tbili_alt <- c("BLAL", "BGAL", "BA2AL", "BA5AL")
paramcd_tbili_ast <- c("BLAS", "BGAS", "BA2AS", "BA5AS")

# Select LBT09 parameters.
adhy_liver <- adhy_liver %>%
  filter(
    SAFFL == "Y",
    AVISIT %in% c("BASELINE", "POST-BASELINE"),
    PARAMCD %in% c(paramcd_tbili_alt, paramcd_tbili_ast)
  )

# Let's be explicit about factor levels for AVISIT and PARAMCD.
adhy_liver <- adhy_liver %>%
  mutate(
    AVISIT = factor(AVISIT, levels = c("BASELINE", "POST-BASELINE")),
    PARAMCD = factor(PARAMCD, levels = c(paramcd_tbili_alt, paramcd_tbili_ast))
  )

# Create indicator and category variables.
adhy_liver <- adhy_liver %>%
  mutate(
    # Create TBILI_CAT categories variable - this is needed so we get the right nesting in the table.
    TBILI_CAT = factor(
      case_when(
        PARAMCD %in% c(paramcd_tbili_alt[1], paramcd_tbili_ast[1]) ~ "Total Bilirubin <= 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[2], paramcd_tbili_ast[2]) ~ "Total Bilirubin > 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[3], paramcd_tbili_ast[3]) ~
          "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN",
        PARAMCD %in% c(paramcd_tbili_alt[4], paramcd_tbili_ast[4]) ~
          "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN"
      ),
      levels = c(
        "Total Bilirubin <= 2xULN",
        "Total Bilirubin > 2xULN",
        "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN",
        "Total Bilirubin > 2xULN and Alkaline Phosphatase <= 5xULN"
      )
    ),
    # Create ALTAST_CAT categories variable
    # this will be the labels for different ALT/AST categories displayed in the table.
    ALTAST_CAT = factor(
      case_when(
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">3-5ULN" ~ "ALT >3 - <= 5xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">5-10ULN" ~ "ALT >5 - <= 10xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">10-20ULN" ~ "ALT >10 - <= 20xULN",
        PARAMCD %in% paramcd_tbili_alt & AVALC == ">20ULN" ~ "ALT > 20xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">3-5ULN" ~ "AST >3 - <= 5xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">5-10ULN" ~ "AST >5 - <= 10xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">10-20ULN" ~ "AST >10 - <= 20xULN",
        PARAMCD %in% paramcd_tbili_ast & AVALC == ">20ULN" ~ "AST > 20xULN",
        TRUE ~ "Criteria not met"
      ),
      levels = c(
        "ALT >3 - <= 5xULN", "ALT >5 - <= 10xULN", "ALT >10 - <= 20xULN",
        "20" = "ALT > 20xULN",
        "AST >3 - <= 5xULN", "AST >5 - <= 10xULN", "AST >10 - <= 20xULN", "AST > 20xULN",
        "Criteria not met"
      )
    ),
    ALTAST_ind = factor(
      case_when(
        PARAMCD %in% paramcd_tbili_alt ~ "ALT",
        PARAMCD %in% paramcd_tbili_ast ~ "AST"
      ),
      levels = c("ALT", "AST")
    )
  )

map <- data.frame(
  ALTAST_ind = c(rep("ALT", 5), rep("AST", 5)),
  ALTAST_CAT = c(
    "ALT >3 - <= 5xULN", "ALT >5 - <= 10xULN", "ALT >10 - <= 20xULN",
    "20" = "ALT > 20xULN", "Criteria not met",
    "AST >3 - <= 5xULN", "AST >5 - <= 10xULN", "AST >10 - <= 20xULN", "AST > 20xULN", "Criteria not met"
  ),
  stringsAsFactors = FALSE
)
```

```{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")}
result <- basic_table() %>%
  split_cols_by("ARM") %>%
  split_cols_by("AVISIT") %>%
  split_rows_by("TBILI_CAT") %>%
  # below split helps us get the right denominator between ALT/AST but it can be hidden
  split_rows_by("ALTAST_ind", split_fun = trim_levels_to_map(map), child_labels = "hidden") %>%
  count_occurrences(
    vars = "ALTAST_CAT",
    .stats = "fraction",
    denom = "n",
    drop = FALSE
  ) %>%
  append_topleft("Liver Laboratory Test Criterion") %>%
  build_table(df = adhy_liver)

# trim away rows with criteria not met
criteria_fun <- function(tr) {
  row_label <- obj_label(tr)
  ifelse(row_label == "Criteria not met", TRUE, FALSE)
}

result <- result %>% trim_rows(criteria = criteria_fun)
result
```

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

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

## Table Selecting Sections

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

```{r variant2, test = list(result_v2 = "result")}
result <- basic_table() %>%
  split_cols_by("ARM") %>%
  split_cols_by("AVISIT") %>%
  split_rows_by(
    "TBILI_CAT",
    split_fun = remove_split_levels("Total Bilirubin > 2xULN and Alkaline Phosphatase <= 2xULN")
  ) %>%
  # below split helps us get the right denominator between ALT/AST but it can be hidden
  split_rows_by(
    "ALTAST_ind",
    split_fun = trim_levels_to_map(map), child_labels = "hidden"
  ) %>%
  count_occurrences(
    vars = "ALTAST_CAT",
    .stats = "fraction",
    denom = "n",
    drop = FALSE
  ) %>%
  append_topleft("Liver Laboratory Test Criterion") %>%
  build_table(df = adhy_liver)

# trim away rows with criteria not met
criteria_fun <- function(tr) {
  row_label <- obj_label(tr)
  ifelse(row_label == "Criteria not met", TRUE, FALSE)
}

result <- result %>% trim_rows(criteria = criteria_fun)
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 >}}

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

Made with ❤️ by the NEST Team

  • Edit this page
  • Report an issue
Cookie Preferences