@@ -70,3 +70,81 @@ make_table_33 <- function(advs,
70
70
71
71
tbl
72
72
}
73
+
74
+ # ' @describeIn make_table_33 Create FDA table 33 using functions from `gtsummary`.
75
+ # '
76
+ # ' @return
77
+ # ' * `make_table_33_gtsum` returns a `gt` object
78
+ # '
79
+ # ' @examples
80
+ # ' tbl <- make_table_33_gtsum(advs = advs)
81
+ # ' tbl
82
+ # '
83
+ # ' @export
84
+ make_table_33_gtsum <- function (advs ,
85
+ adsl ,
86
+ id_var = " USUBJID" ,
87
+ arm_var = " ARM" ,
88
+ saffl_var = " SAFFL" ,
89
+ lbl_overall = NULL ) {
90
+ checkmate :: assert_subset(c(
91
+ saffl_var , " AVISITN" , " PARAMCD" , " AVAL" , " AVALU" , arm_var , id_var
92
+ ), names(advs ))
93
+ assert_flag_variables(advs , saffl_var )
94
+
95
+ advs_all <- advs %> %
96
+ filter(
97
+ .data [[saffl_var ]] == " Y" ,
98
+ AVISITN > = 1 ,
99
+ PARAMCD %in% c(" DIABP" , " SYSBP" )
100
+ ) %> %
101
+ group_by(.data [[id_var ]], PARAMCD ) %> %
102
+ mutate(
103
+ MAX_DIABP = if_else(PARAMCD == " DIABP" , max(AVAL ), NA_real_ ),
104
+ MAX_SYSBP = if_else(PARAMCD == " SYSBP" , max(AVAL ), NA_real_ )
105
+ ) %> %
106
+ ungroup() %> %
107
+ mutate(
108
+ SBP90 = formatters :: with_label(PARAMCD == " SYSBP" & MAX_SYSBP < 90 , " SBP <90" ),
109
+ DBP60 = formatters :: with_label(PARAMCD == " DIABP" & MAX_DIABP < 60 , " DBP <60" )
110
+ )
111
+
112
+ advs_diabp <- advs_all %> %
113
+ filter(PARAMCD == " DIABP" ) %> %
114
+ distinct(.data [[id_var ]], .keep_all = TRUE ) %> %
115
+ select(all_of(id_var ), DBP60 , ARM , AVALU )
116
+
117
+ advs_sysbp <- advs_all %> %
118
+ filter(PARAMCD == " SYSBP" ) %> %
119
+ distinct(.data [[id_var ]], .keep_all = TRUE ) %> %
120
+ select(all_of(id_var ), SBP90 )
121
+
122
+ advs_combined <-
123
+ full_join(advs_diabp , advs_sysbp , by = " USUBJID" ) %> %
124
+ select(SBP90 , DBP60 , ARM , AVALU )
125
+
126
+ avalu <- unique(advs_combined $ AVALU )[1 ]
127
+ advs_combined <- advs_combined %> % select(- AVALU )
128
+
129
+ tbl <- advs_combined %> %
130
+ tbl_summary(
131
+ by = arm_var ,
132
+ statistic = list (all_categorical() ~ " {n} ({p}%)" ),
133
+ digits = everything() ~ c(0 , 1 )
134
+ ) %> %
135
+ modify_header(label ~ paste0(" **Blood Pressure (" , avalu , " )**" )) %> %
136
+ modify_header(all_stat_cols() ~ " **{level}** \n N = {n}" ) %> %
137
+ gtsummary :: modify_column_alignment(columns = all_stat_cols(), align = " right" )
138
+
139
+ if (! is.null(lbl_overall )) {
140
+ tbl <- tbl %> %
141
+ add_overall(last = TRUE , col_label = paste0(" **" , lbl_overall , " ** \n N = {n}" ))
142
+ }
143
+
144
+ tbl <- tbl %> % modify_footnote(update = everything() ~ NA )
145
+
146
+ gtsummary :: with_gtsummary_theme(
147
+ x = gtsummary :: theme_gtsummary_compact(),
148
+ expr = as_gt(tbl )
149
+ )
150
+ }
0 commit comments