From 96e81ba8198ff7cf5e38da42c048857fd3a46e0a Mon Sep 17 00:00:00 2001 From: Kai Gu Date: Tue, 30 Apr 2024 11:15:31 +0800 Subject: [PATCH] Add s_count_event function to count the number of events for specific variable (#26) * add s_count_event function to count events for specific variable * add s_count_event to count the number of events such as ae overview summary --- NAMESPACE | 3 + R/count_event.R | 154 ++++++++++++++++++++++++++++++ R/data.R | 12 +++ R/package.R | 2 +- R/pkg-methods.R | 33 +++++++ R/proportion.R | 2 +- data-raw/create_random_cdisc.R | 9 ++ data/rand_adae.rda | Bin 0 -> 30697 bytes data/rand_adsl.rda | Bin 0 -> 6799 bytes inst/WORDLIST | 1 + man/cdisc_random_data.Rd | 23 +++++ man/prop_odds_ratio.Rd | 2 +- man/s_count_event.Rd | 90 +++++++++++++++++ tests/spelling.R | 9 +- tests/testthat/test-count_event.R | 128 +++++++++++++++++++++++++ tests/testthat/test-pkg-methods.R | 35 +++++++ 16 files changed, 494 insertions(+), 9 deletions(-) create mode 100644 R/count_event.R create mode 100644 data-raw/create_random_cdisc.R create mode 100644 data/rand_adae.rda create mode 100644 data/rand_adsl.rda create mode 100644 man/cdisc_random_data.Rd create mode 100644 man/s_count_event.Rd create mode 100644 tests/testthat/test-count_event.R diff --git a/NAMESPACE b/NAMESPACE index f7ffbaa..78729b0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +S3method(print,count_evt) S3method(print,or_ci) S3method(print,prop_ci) S3method(print,s_coxph) @@ -11,6 +12,7 @@ export(derive_bor) export(h_pairwise_survdiff) export(h_prep_prop) export(rrPostProb) +export(s_count_event) export(s_get_coxph) export(s_get_lsmeans) export(s_get_survfit) @@ -39,6 +41,7 @@ importFrom(lubridate,days) importFrom(lubridate,ymd) importFrom(magrittr,"%>%") importFrom(magrittr,set_colnames) +importFrom(magrittr,set_names) importFrom(magrittr,set_rownames) importFrom(rlang,":=") importFrom(rlang,.data) diff --git a/R/count_event.R b/R/count_event.R new file mode 100644 index 0000000..79fb1bb --- /dev/null +++ b/R/count_event.R @@ -0,0 +1,154 @@ +# s_count_event ---- + +#' Count the Number of Events for Specific Variable +#' +#' @description `r lifecycle::badge("experimental")` +#' +#' This function counts the number of events occur for specific variable with +#' multiple conditions if needed, such as counting the different types of AE +#' occurrence rates. +#' +#' @param data (`data.frame`)\cr a data frame as input. +#' @param var (`string`)\cr target variable name for counting. +#' @param by (`string`)\cr an optional variable to group by. If null, use the whole data. +#' @param cond (`string`)\cr a listing contains multiple types of filtering conditions +#' that only support the equation such as `"TRTEMFL" = "Y"`. And the left side of the +#' equation is filtering id while the right should be a flag, string or numerical value. +#' @param label (`string`)\cr an optional string vector for labeling each filtering +#' conditions. Default is the name of `cond` variable. +#' @param denom (`string` or `data.frame`)\cr denominator for proportion can be a +#' numeric vector of denominators or a data frame where we can count the `var` inside. +#' +#' @return +#' * `s_count_event` returns an object of class `count_evt` that is a data frame +#' contains percentages for each group for different conditions. +#' +#' @note +#' - The order of `cond` names should be one-to-one respect to `label` you define. +#' - The order of `denom` names should be one-to-one respect to `by` variable levels. +#' +#' @export +#' +#' @examples +#' data("rand_adsl") +#' data("rand_adae") +#' +#' # by TRTA groups +#' s_count_event( +#' data = rand_adae, var = "SUBJID", by = "ARMCD", +#' cond = list( +#' "TEAEs" = c("TRTEMFL" = "Y"), +#' "TRAEs" = c("TRTEMFL" = "Y", "AEREL" = "Y"), +#' "SAE" = c("AESER" = "Y"), +#' "TRSAE" = c("AESER" = "Y", "AEREL" = "Y") +#' ), +#' label = c("Any TEAEs", "Any treatment-related TEAEs", +#' "Any serious TEAEs", "Any serious treatment-related TEAEs"), +#' denom = rand_adsl +#' ) +#' +#' # specify the denominator for each groups +#' s_count_event( +#' data = rand_adae, var = "SUBJID", by = "ARMCD", +#' cond = list("TEAEs" = c("TRTEMFL" = "Y")), +#' label = c("Any TEAEs"), +#' denom = c(100, 100, 100) +#' ) +#' +#' # no grouping +#' s_count_event( +#' data = rand_adae, var = "SUBJID", +#' cond = list( +#' "TEAEs" = c("TRTEMFL" = "Y"), +#' "TRAEs" = c("TRTEMFL" = "Y", "AEREL" = "Y") +#' ), +#' label = c("Any TEAEs", "Any treatment-related TEAEs"), +#' denom = 200 +#' ) +s_count_event <- function(data, + var, + by = NULL, + cond, + label = names(cond), + denom) { + assert_class(data, "data.frame") + assert_subset(var, names(data), empty.ok = FALSE) + assert_subset(by, names(data)) + assert_true(length(names(cond)) == length(label)) + assert_multi_class(denom, c("numeric", "data.frame")) + if (is.null(by) & is.data.frame(denom)) { + stop("denom should be numeric vector if by is defined as NULL.") + } + + cond_labels <- split(label, names(cond)) + if (is.null(by)) { + by <- "Total" + data[["Total"]] <- factor(by, levels = by) + } else { + if (!is.factor(data[[by]])) { + data[[by]] <- factor(by, levels = unique(data[[by]])) + } + } + denom_vec <- if (is.data.frame(denom)) { + if (!is.null(by)) { + cnt <- denom %>% count(!!sym(by)) + set_names(cnt[, "n", drop = TRUE], cnt[, 1, drop = TRUE]) + } else { + set_names(length(denom[[var]]), levels(data[[by]])) + } + } else { + set_names(denom, levels(data[[by]])) + } + + assert_numeric(denom_vec) + assert_true(all(names(denom_vec) == levels(data[[by]]))) + + cnt_tb <- cond %>% + purrr::imap(function(x, idx) { + filter_expr <- if (is.character(x)) { + paste0(names(x), " == '", x, "'", collapse = " & ") + } else if (is.numeric(x)) { + paste0(names(x), " == ", x, collapse = " & ") + } else { + stop("Each element of cond variable should be numeric or characteric.") + } + df <- data %>% + filter(!!rlang::parse_quo(filter_expr, env = rlang::global_env())) + attributes(df)$label <- NULL + res <- if (!is.null(by)) { + df %>% + distinct(!!sym(by), !!sym(var), .keep_all = TRUE) %>% + count(!!sym(by)) + } else { + df %>% + distinct(!!sym(var), .keep_all = TRUE) %>% + count() + } + res %>% + mutate( + group = droplevels(!!sym(by)), + N = as.vector(denom_vec), + perc = .data$n / .data$N, + label_ = idx, + label = cond_labels[[idx]] + ) %>% + ungroup() %>% + select(c("group", "n", "N", "perc", "label_", "label")) + }) %>% + purrr::list_rbind() + + structure( + list( + data = data, + cnt = cnt_tb, + params = list( + var = var, + by = by, + cond = cond, + label = label, + denom = denom_vec + ) + ), + class = "count_evt" + ) +} diff --git a/R/data.R b/R/data.R index fbc9426..79e27be 100644 --- a/R/data.R +++ b/R/data.R @@ -34,3 +34,15 @@ #' John Wiley and Sons Inc., New York, NY. #' "whas500" + +#' CDISC Random ADaM Data +#' +#' @description `r lifecycle::badge("experimental")` +#' +#' Random ADaM data created from `random.cdisc.data` package. +#' +#' @rdname cdisc_random_data +"rand_adsl" + +#' @rdname cdisc_random_data +"rand_adae" diff --git a/R/package.R b/R/package.R index 32ce4bd..ee57906 100644 --- a/R/package.R +++ b/R/package.R @@ -5,7 +5,7 @@ "_PACKAGE" #' @import checkmate -#' @importFrom magrittr set_colnames set_rownames +#' @importFrom magrittr set_colnames set_rownames set_names #' @importFrom lifecycle deprecated #' @importFrom stats pbeta rbinom confint as.formula setNames coef quantile #' @importFrom dplyr add_count arrange bind_rows case_when count distinct filter diff --git a/R/pkg-methods.R b/R/pkg-methods.R index b6a822c..87f1435 100644 --- a/R/pkg-methods.R +++ b/R/pkg-methods.R @@ -496,3 +496,36 @@ print.s_coxph <- function(x, ...) { invisible(x) } + + +#' @describeIn s_count_event prints the counts and percentages of events. +#' @exportS3Method +#' @keywords internal +print.count_evt <- function(x, ...) { + grp_var <- x$params$by + + a_evt_func <- function(df, .var, cnt_tb, lab) { + curgrp <- df[[.var]][1] + res <- cnt_tb %>% + filter(.data$group == curgrp & .data$label == lab) + in_rows( + rcell(unlist(res[, c("n", "perc"), drop = TRUE]), format = "xx (xx.x%)"), + .names = lab + ) + } + + labels <- x$params$label + tbl <- basic_table(show_colcounts = TRUE) %>% + split_cols_by(grp_var) + for (i in seq_along(labels)) { + tbl <- tbl %>% + analyze(grp_var, a_evt_func, show_labels = "hidden", + extra_args = list(cnt_tb = x$cnt, lab = labels[i]), + table_names = labels[i]) + } + result <- tbl %>% + build_table(df = x$data, col_counts = x$params$denom) + print(result) + + invisible(x) +} diff --git a/R/proportion.R b/R/proportion.R index fac21db..6c54081 100644 --- a/R/proportion.R +++ b/R/proportion.R @@ -31,7 +31,7 @@ NULL #' #' @param data (`data.frame`)\cr a data frame as input. #' @param var (`string`)\cr target variable name for estimation. -#' @param by (`string`)\cr a optional variable to group by. If null, use the whole data. +#' @param by (`string`)\cr an optional variable to group by. If null, use the whole data. #' @param by.level (`vector`)\cr an optional vector for encoding `var` as a factor #' and the first level will be as the reference group. If null, use the default #' order to encode. diff --git a/data-raw/create_random_cdisc.R b/data-raw/create_random_cdisc.R new file mode 100644 index 0000000..fdb38be --- /dev/null +++ b/data-raw/create_random_cdisc.R @@ -0,0 +1,9 @@ +rand_adsl <- random.cdisc.data::radsl( + N = 100, study_duration = 2, + with_trt02 = FALSE, + seed = 2 +) +rand_adae <- random.cdisc.data::radae(adsl, seed = 2) + +usethis::use_data(rand_adsl, overwrite = TRUE) +usethis::use_data(rand_adae, overwrite = TRUE) diff --git a/data/rand_adae.rda b/data/rand_adae.rda new file mode 100644 index 0000000000000000000000000000000000000000..fb44b8fa528adf5a5045df12814afbabc9714874 GIT binary patch literal 30697 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 XF2N8`JCP7jKmIP{ig2MJc!&jh3BF(* literal 0 HcmV?d00001 diff --git a/data/rand_adsl.rda b/data/rand_adsl.rda new file mode 100644 index 0000000000000000000000000000000000000000..982f5867779a679000ae1856b143d77c2ee61651 GIT binary patch literal 6799 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