FDA Table 32
Percentage of Patients With Maximum Diastolic Blood Pressure by Category of Blood Pressure Postbaseline, Safety Population, Pooled Analysis
table
FDA
safety
vital signs
Code
# Load libraries & data -------------------------------------
library(dplyr)
library(cards)
library(gtsummary)
adsl <- random.cdisc.data::cadsl
advs <- random.cdisc.data::cadvs
# Pre-processing --------------------------------------------
adsl <- adsl |>
filter(SAFFL == "Y") # safety population
data <- advs |>
filter(
# safety population
SAFFL == "Y",
# diastolic blood pressure
PARAMCD == "DIABP",
# post-baseline visits
AVISITN >= 1
) |>
# analyze maximum values of each subject
slice_max(AVAL, n = 1L, by = USUBJID) |>
# define analysis value cutoffs
mutate(
L60 = AVAL < 60, # DIABP <60
G60 = AVAL > 60, # DIABP >60
G90 = AVAL > 90, # DIABP >90
G110 = AVAL > 110, # DIABP >110
GE120 = AVAL >= 120 # DIABP >=120
)
{cards} data frame: 39 x 11
group1 group1_level variable variable_level context stat_name stat_label stat fmt_fn warning error
1 TRT01A A: Drug X L60 TRUE dichotom… n n 0 0
2 TRT01A A: Drug X L60 TRUE dichotom… p % 0 <fn>
3 TRT01A A: Drug X G60 TRUE dichotom… n n 134 0
4 TRT01A A: Drug X G60 TRUE dichotom… p % 1 <fn>
5 TRT01A A: Drug X G90 TRUE dichotom… n n 134 0
6 TRT01A A: Drug X G90 TRUE dichotom… p % 1 <fn>
7 TRT01A A: Drug X G110 TRUE dichotom… n n 123 0
8 TRT01A A: Drug X G110 TRUE dichotom… p % 0.918 <fn>
9 TRT01A A: Drug X GE120 TRUE dichotom… n n 88 0
10 TRT01A A: Drug X GE120 TRUE dichotom… p % 0.657 <fn>
11 TRT01A B: Place… L60 TRUE dichotom… n n 0 0
12 TRT01A B: Place… L60 TRUE dichotom… p % 0 <fn>
13 TRT01A B: Place… G60 TRUE dichotom… n n 134 0
14 TRT01A B: Place… G60 TRUE dichotom… p % 1 <fn>
15 TRT01A B: Place… G90 TRUE dichotom… n n 134 0
16 TRT01A B: Place… G90 TRUE dichotom… p % 1 <fn>
17 TRT01A B: Place… G110 TRUE dichotom… n n 111 0
18 TRT01A B: Place… G110 TRUE dichotom… p % 0.828 <fn>
19 TRT01A B: Place… GE120 TRUE dichotom… n n 70 0
20 TRT01A B: Place… GE120 TRUE dichotom… p % 0.522 <fn>
21 TRT01A C: Combi… L60 TRUE dichotom… n n 0 0
22 TRT01A C: Combi… L60 TRUE dichotom… p % 0 <fn>
23 TRT01A C: Combi… G60 TRUE dichotom… n n 132 0
24 TRT01A C: Combi… G60 TRUE dichotom… p % 1 <fn>
25 TRT01A C: Combi… G90 TRUE dichotom… n n 131 0
26 TRT01A C: Combi… G90 TRUE dichotom… p % 0.992 <fn>
27 TRT01A C: Combi… G110 TRUE dichotom… n n 107 0
28 TRT01A C: Combi… G110 TRUE dichotom… p % 0.811 <fn>
29 TRT01A C: Combi… GE120 TRUE dichotom… n n 76 0
30 TRT01A C: Combi… GE120 TRUE dichotom… p % 0.576 <fn>
31 <NA> TRT01A A: Drug X categori… n n 134 0
32 <NA> TRT01A A: Drug X categori… N N 400 0
33 <NA> TRT01A A: Drug X categori… p % 0.335 <fn>
34 <NA> TRT01A B: Place… categori… n n 134 0
35 <NA> TRT01A B: Place… categori… N N 400 0
36 <NA> TRT01A B: Place… categori… p % 0.335 <fn>
37 <NA> TRT01A C: Combi… categori… n n 132 0
38 <NA> TRT01A C: Combi… categori… N N 400 0
39 <NA> TRT01A C: Combi… categori… p % 0.33 <fn>
Code
tbl <- tbl_ard_summary(
ard,
by = TRT01A,
# Add labels for each range
label = list(
L60 = "<60",
G60 = ">60",
G90 = ">90",
G110 = ">110",
GE120 = ">=120"
)
) |>
modify_header(
# Update label, add analysis value units
label ~ paste0("**Diastolic Blood Pressure \n(", data$AVALU[1], ")**"),
# Add N values to `by` variable labels
all_stat_cols() ~ "**{level}** \nN = {n}"
)
tbl