Skip to content

Commit

Permalink
Merge branch 'main' into 2141_supersede_derive_param_extreme_record
Browse files Browse the repository at this point in the history
  • Loading branch information
zdz2101 authored Oct 20, 2023
2 parents acd4c92 + 9bdd50c commit 50f3d60
Show file tree
Hide file tree
Showing 15 changed files with 138 additions and 19 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/templates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:
branches:
- main
- devel
- patch

jobs:
templates:
Expand Down
7 changes: 7 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ were enhanced such that more than one summary variable can be derived, e.g.,

## Various

# admiral 0.12.3

- Fixed a bug in `derive_var_dthcaus()` where if a subject has observations in
more than one of the sources, the one from the last source was selected
regardless of the date. Now the function works as described in its
documentation. (#2154)

# admiral 0.12.2

- A unit test for `derive_param_computed()` was modified in anticipation of major user-facing changes to R version 4.4 (#2147)
Expand Down
6 changes: 3 additions & 3 deletions R/data.R
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
#' Note: Variables `SOC`, `TERM`, `Grade 1`, `Grade 2`,`Grade 3`,`Grade 4`,`Grade 5`, `Definition`
#' are from the source document on NCI-CTC website defining the grading criteria.
#' [**Common Terminology Criteria for Adverse Events (CTCAE)v4.0**](https://ctep.cancer.gov/protocoldevelopment/electronic_applications/ctc.htm#ctc_40)
#' From these variables only 'TERM' is used in the {admiral} code, the rest are for information and
#' From these variables only 'TERM' is used in the `{admiral}` code, the rest are for information and
#' traceability only.
#'
#'
Expand Down Expand Up @@ -124,7 +124,7 @@
#' Note: Variables `SOC`, `TERM`, `Grade 1`, `Grade 2`,`Grade 3`,`Grade 4`,`Grade 5`, `Definition`
#' are from the source document on NCI-CTC website defining the grading criteria.
#' [**Common Terminology Criteria for Adverse Events (CTCAE)v5.0**](https://ctep.cancer.gov/protocoldevelopment/electronic_applications/ctc.htm#ctc_50)
#' From these variables only 'TERM' is used in the {admiral} code, the rest are for information and
#' From these variables only 'TERM' is used in the `{admiral}` code, the rest are for information and
#' traceability only.
#'
#'
Expand Down Expand Up @@ -162,7 +162,7 @@
#' Note: Variables `SOC`, `TERM`, `SUBGROUP`, `Grade 1`, `Grade 2`,`Grade 3`,`Grade 4`,`Grade 5`, `Definition`
#' are from the source document on DAIDS website defining the grading criteria.
#' [Division of AIDS (DAIDS) Table for Grading the Severity of Adult and Pediatric Adverse Events
#' From these variables only 'TERM' is used in the {admiral} code, the rest are for information and
#' From these variables only 'TERM' is used in the `{admiral}` code, the rest are for information and
#' traceability only.
#'
#'
Expand Down
4 changes: 2 additions & 2 deletions R/derive_date_vars.R
Original file line number Diff line number Diff line change
Expand Up @@ -1248,7 +1248,7 @@ compute_tmf <- function(dtc,
#' The date can be imputed (see `date_imputation` argument)
#' and the date imputation flag ('`--DTF'`) can be added.
#'
#' In {admiral} we don't allow users to pick any single part of the date/time to
#' In `{admiral}` we don't allow users to pick any single part of the date/time to
#' impute, we only enable to impute up to a highest level, i.e. you couldn't
#' choose to say impute months, but not days.
#'
Expand Down Expand Up @@ -1456,7 +1456,7 @@ derive_vars_dt <- function(dataset, # nolint: cyclocomp_linter
#' The date and time can be imputed (see `date_imputation`/`time_imputation` arguments)
#' and the date/time imputation flag (`'--DTF'`, `'--TMF'`) can be added.
#'
#' In {admiral} we don't allow users to pick any single part of the date/time to
#' In `{admiral}` we don't allow users to pick any single part of the date/time to
#' impute, we only enable to impute up to a highest level, i.e. you couldn't
#' choose to say impute months, but not days.
#'
Expand Down
4 changes: 2 additions & 2 deletions R/derive_var_dthcaus.R
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ derive_var_dthcaus <- function(dataset,

# process each source
add_data <- vector("list", length(sources))
tmp_source_nr <- get_new_tmp_var(dataset)
tmp_date <- get_new_tmp_var(dataset)
for (ii in seq_along(sources)) {
source_dataset_name <- sources[[ii]]$dataset_name
source_dataset <- source_datasets[[source_dataset_name]]
Expand All @@ -183,8 +185,6 @@ derive_var_dthcaus <- function(dataset,
)

# if several death records, use the first/last according to 'mode'
tmp_source_nr <- get_new_tmp_var(dataset)
tmp_date <- get_new_tmp_var(dataset)
add_data[[ii]] <- add_data[[ii]] %>%
filter_extreme(
order = exprs(!!date_var, !!!sources[[ii]]$order),
Expand Down
2 changes: 1 addition & 1 deletion R/derive_vars_dtm_to_tm.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#' @details
#' The names of the newly added variables are automatically set by replacing the
#' `--DTM` suffix of the `source_vars` with `--TM`. The `--TM` variables are created
#' using the {hms} package.
#' using the `{hms}` package.
#'
#' @return
#' A data frame containing the input dataset with the corresponding time
Expand Down
2 changes: 1 addition & 1 deletion R/duplicates.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#'
#'
#' @details
#' Many {admiral} function check that the input dataset contains only one record
#' Many `{admiral}` function check that the input dataset contains only one record
#' per `by_vars` group and throw an error otherwise. The `get_duplicates_dataset()`
#' function allows one to retrieve the duplicate records that lead to an error.
#'
Expand Down
2 changes: 1 addition & 1 deletion man/atoxgr_criteria_ctcv4.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/atoxgr_criteria_ctcv5.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/atoxgr_criteria_daids.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/derive_vars_dt.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/derive_vars_dtm.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/derive_vars_dtm_to_tm.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_duplicates_dataset.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

116 changes: 114 additions & 2 deletions tests/testthat/test-derive_var_dthcaus.R
Original file line number Diff line number Diff line change
Expand Up @@ -414,8 +414,8 @@ test_that("derive_var_dthcaus Test 8: `dataset` is sorted using the `order` para
expect_dfs_equal(expected_output, actual_output, keys = "USUBJID")
})

## Test 9: returns a error when traceability_vars is used ----
test_that("derive_var_dthcaus Test 9: returns a error when traceability_vars is used", {
## Test 9: returns a warning when traceability_vars is used ----
test_that("derive_var_dthcaus Test 9: returns a warning when traceability_vars is used", {
ae <- tibble::tribble(
~STUDYID, ~USUBJID, ~AESEQ, ~AEDECOD, ~AEOUT, ~AEDTHDTC,
"TEST01", "PAT01", 12, "SUDDEN DEATH", "FATAL", "2021-04-04"
Expand All @@ -437,3 +437,115 @@ test_that("derive_var_dthcaus Test 9: returns a error when traceability_vars is
class = "lifecycle_error_deprecated"
)
})

## Test 10: multiple observations from different sources ----
test_that("derive_var_dthcaus Test 10: multiple observations from different sources", {
expected <- tibble::tribble(
~STUDYID, ~USUBJID, ~DTHCAUS,
"TEST01", "PAT01", "SUDDEN DEATH",
"TEST01", "PAT02", NA_character_,
"TEST01", "PAT03", "DEATH DUE TO progression of disease"
)

adsl <- select(expected, -DTHCAUS)

ae <- tibble::tribble(
~STUDYID, ~USUBJID, ~AESEQ, ~AEDECOD, ~AEOUT, ~AEDTHDTC,
"TEST01", "PAT01", 12, "SUDDEN DEATH", "FATAL", "2021-04-04"
) %>%
mutate(
AEDTHDT = ymd(AEDTHDTC)
)

ds <- tibble::tribble(
~STUDYID, ~USUBJID, ~DSSEQ, ~DSDECOD, ~DSTERM, ~DSSTDTC,
"TEST01", "PAT01", 4, "DEATH", "DEATH DUE TO progression of disease", "2021-04-05",
"TEST01", "PAT02", 1, "INFORMED CONSENT OBTAINED", "INFORMED CONSENT OBTAINED", "2021-04-02",
"TEST01", "PAT02", 2, "RANDOMIZATION", "RANDOMIZATION", "2021-04-11",
"TEST01", "PAT02", 3, "COMPLETED", "PROTOCOL COMPLETED", "2021-12-01",
"TEST01", "PAT03", 1, "DEATH", "DEATH DUE TO progression of disease", "2021-04-07",
"TEST01", "PAT03", 2, "RANDOMIZATION", "RANDOMIZATION", "2021-04-11",
"TEST01", "PAT03", 3, "COMPLETED", "PROTOCOL COMPLETED", "2021-12-01"
)

# Derive `DTHCAUS` only - for on-study deaths only
src_ae <- dthcaus_source(
dataset_name = "ae",
filter = AEOUT == "FATAL",
date = convert_dtc_to_dt(AEDTHDTC),
mode = "first",
dthcaus = AEDECOD
)

src_ds <- dthcaus_source(
dataset_name = "ds",
filter = DSDECOD == "DEATH" & grepl("DEATH DUE TO", DSTERM),
date = convert_dtc_to_dt(DSSTDTC),
mode = "first",
dthcaus = DSTERM
)
actual <- adsl %>%
derive_var_dthcaus(src_ae, src_ds, source_datasets = list(ae = ae, ds = ds))

expect_dfs_equal(
base = expected,
compare = actual,
keys = c("USUBJID")
)
})

## Test 11: multiple observations from different sources with same date ----
test_that("derive_var_dthcaus Test 11: multiple observations with same date", {
expected <- tibble::tribble(
~STUDYID, ~USUBJID, ~DTHCAUS,
"TEST01", "PAT01", "SUDDEN DEATH",
"TEST01", "PAT02", NA_character_,
"TEST01", "PAT03", "DEATH DUE TO progression of disease"
)

adsl <- select(expected, -DTHCAUS)

ae <- tibble::tribble(
~STUDYID, ~USUBJID, ~AESEQ, ~AEDECOD, ~AEOUT, ~AEDTHDTC,
"TEST01", "PAT01", 12, "SUDDEN DEATH", "FATAL", "2021-04-05"
) %>%
mutate(
AEDTHDT = ymd(AEDTHDTC)
)

ds <- tibble::tribble(
~STUDYID, ~USUBJID, ~DSSEQ, ~DSDECOD, ~DSTERM, ~DSSTDTC,
"TEST01", "PAT01", 4, "DEATH", "DEATH DUE TO progression of disease", "2021-04-05",
"TEST01", "PAT02", 1, "INFORMED CONSENT OBTAINED", "INFORMED CONSENT OBTAINED", "2021-04-02",
"TEST01", "PAT02", 2, "RANDOMIZATION", "RANDOMIZATION", "2021-04-11",
"TEST01", "PAT02", 3, "COMPLETED", "PROTOCOL COMPLETED", "2021-12-01",
"TEST01", "PAT03", 1, "DEATH", "DEATH DUE TO progression of disease", "2021-04-07",
"TEST01", "PAT03", 2, "RANDOMIZATION", "RANDOMIZATION", "2021-04-11",
"TEST01", "PAT03", 3, "COMPLETED", "PROTOCOL COMPLETED", "2021-12-01"
)

# Derive `DTHCAUS` only - for on-study deaths only
src_ae <- dthcaus_source(
dataset_name = "ae",
filter = AEOUT == "FATAL",
date = convert_dtc_to_dt(AEDTHDTC),
mode = "first",
dthcaus = AEDECOD
)

src_ds <- dthcaus_source(
dataset_name = "ds",
filter = DSDECOD == "DEATH" & grepl("DEATH DUE TO", DSTERM),
date = convert_dtc_to_dt(DSSTDTC),
mode = "first",
dthcaus = DSTERM
)
actual <- adsl %>%
derive_var_dthcaus(src_ae, src_ds, source_datasets = list(ae = ae, ds = ds))

expect_dfs_equal(
base = expected,
compare = actual,
keys = c("USUBJID")
)
})

0 comments on commit 50f3d60

Please sign in to comment.