R/derive_param_exposure.R
derive_param_exposure.Rd
Add a record computed from the aggregated analysis value of another parameter and compute the
start (ASTDT(M)
)and end date (AENDT(M)
) as the minimum and maximum date by by_vars
.
derive_param_exposure(
dataset = NULL,
dataset_add,
by_vars,
input_code,
filter_add = NULL,
set_values_to = NULL
)
Input dataset
The variables specified by the by_vars
argument are expected to be in the dataset.
NULL
Additional dataset
The variables specified for by_vars
, analysis_var
, PARAMCD
,
alongside either ASTDTM
and AENDTM
or ASTDT
and AENDT
are also expected.
Observations from the specified dataset are going to be used to calculate and added
as new records to the input dataset (dataset
).
none
Grouping variables
For each group defined by by_vars
an observation is added to the output
dataset. Only variables specified in by_vars
will be populated
in the newly created records.
none
Required parameter code
The observations where PARAMCD
equals the specified value are considered to compute the
summary record.
A character of PARAMCD
value
none
Filter condition as logical expression to apply during
summary calculation. By default, filtering expressions are computed within
by_vars
as this will help when an aggregating, lagging, or ranking
function is involved.
For example,
filter_add = (AVAL > mean(AVAL, na.rm = TRUE))
will filter all AVAL
values greater than mean of AVAL
with in by_vars
.
filter_add = (dplyr::n() > 2)
will filter n count of by_vars
greater
than 2.
NULL
Variable-value pairs
Set a list of variables to some specified value for the new observation(s)
LHS refer to a variable. It is expected that at least PARAMCD
is defined.
RHS refers to the values to set to the variable. This can be a string, a symbol, a numeric
value, NA
, or an expression.
(e.g. exprs(PARAMCD = "TDOSE",PARCAT1 = "OVERALL")
).
List of variable-value pairs
NULL
The input dataset with a new record added for each group (as defined
by by_vars
parameter). That is, a variable will only
be populated in this new record if it is specified in by_vars
.
For each new record,
set_values_to
lists each specified variable and computes its value,
the variable(s) specified on the LHS of set_values_to
are set to their paired value (RHS).
In addition, the start and end date are computed as the minimum/maximum dates by by_vars
.
If the input datasets contains
both AxxDTM
and AxxDT
then all ASTDTM
,AENDTM
, ASTDT
, AENDT
are computed
only AxxDTM
then ASTDTM
,AENDTM
are computed
only AxxDT
then ASTDT
,AENDT
are computed.
For each group (with respect to the variables specified for the by_vars
parameter),
an observation is added to the output dataset and the defined values are set to the defined
variables
BDS-Findings Functions for adding Parameters/Records:
default_qtc_paramcd()
,
derive_expected_records()
,
derive_extreme_event()
,
derive_extreme_records()
,
derive_locf_records()
,
derive_param_bmi()
,
derive_param_bsa()
,
derive_param_computed()
,
derive_param_doseint()
,
derive_param_exist_flag()
,
derive_param_framingham()
,
derive_param_map()
,
derive_param_qtc()
,
derive_param_rr()
,
derive_param_wbc_abs()
,
derive_summary_records()
library(tibble)
library(dplyr, warn.conflicts = FALSE)
library(lubridate, warn.conflicts = FALSE)
library(stringr, warn.conflicts = FALSE)
adex <- tribble(
~USUBJID, ~PARAMCD, ~AVAL, ~AVALC, ~VISIT, ~ASTDT, ~AENDT,
"1015", "DOSE", 80, NA_character_, "BASELINE", ymd("2014-01-02"), ymd("2014-01-16"),
"1015", "DOSE", 85, NA_character_, "WEEK 2", ymd("2014-01-17"), ymd("2014-06-18"),
"1015", "DOSE", 82, NA_character_, "WEEK 24", ymd("2014-06-19"), ymd("2014-07-02"),
"1015", "ADJ", NA, NA_character_, "BASELINE", ymd("2014-01-02"), ymd("2014-01-16"),
"1015", "ADJ", NA, NA_character_, "WEEK 2", ymd("2014-01-17"), ymd("2014-06-18"),
"1015", "ADJ", NA, NA_character_, "WEEK 24", ymd("2014-06-19"), ymd("2014-07-02"),
"1017", "DOSE", 80, NA_character_, "BASELINE", ymd("2014-01-05"), ymd("2014-01-19"),
"1017", "DOSE", 50, NA_character_, "WEEK 2", ymd("2014-01-20"), ymd("2014-05-10"),
"1017", "DOSE", 65, NA_character_, "WEEK 24", ymd("2014-05-10"), ymd("2014-07-02"),
"1017", "ADJ", NA, NA_character_, "BASELINE", ymd("2014-01-05"), ymd("2014-01-19"),
"1017", "ADJ", NA, "ADVERSE EVENT", "WEEK 2", ymd("2014-01-20"), ymd("2014-05-10"),
"1017", "ADJ", NA, NA_character_, "WEEK 24", ymd("2014-05-10"), ymd("2014-07-02")
) %>%
mutate(ASTDTM = ymd_hms(paste(ASTDT, "00:00:00")), AENDTM = ymd_hms(paste(AENDT, "00:00:00")))
# Cumulative dose
adex %>%
derive_param_exposure(
dataset_add = adex,
by_vars = exprs(USUBJID),
set_values_to = exprs(
PARAMCD = "TDOSE",
PARCAT1 = "OVERALL",
AVAL = sum(AVAL, na.rm = TRUE)
),
input_code = "DOSE"
) %>%
select(-ASTDTM, -AENDTM)
#> # A tibble: 14 × 8
#> USUBJID PARAMCD AVAL AVALC VISIT ASTDT AENDT PARCAT1
#> <chr> <chr> <dbl> <chr> <chr> <date> <date> <chr>
#> 1 1015 DOSE 80 NA BASELINE 2014-01-02 2014-01-16 NA
#> 2 1015 DOSE 85 NA WEEK 2 2014-01-17 2014-06-18 NA
#> 3 1015 DOSE 82 NA WEEK 24 2014-06-19 2014-07-02 NA
#> 4 1015 ADJ NA NA BASELINE 2014-01-02 2014-01-16 NA
#> 5 1015 ADJ NA NA WEEK 2 2014-01-17 2014-06-18 NA
#> 6 1015 ADJ NA NA WEEK 24 2014-06-19 2014-07-02 NA
#> 7 1017 DOSE 80 NA BASELINE 2014-01-05 2014-01-19 NA
#> 8 1017 DOSE 50 NA WEEK 2 2014-01-20 2014-05-10 NA
#> 9 1017 DOSE 65 NA WEEK 24 2014-05-10 2014-07-02 NA
#> 10 1017 ADJ NA NA BASELINE 2014-01-05 2014-01-19 NA
#> 11 1017 ADJ NA ADVERSE EVENT WEEK 2 2014-01-20 2014-05-10 NA
#> 12 1017 ADJ NA NA WEEK 24 2014-05-10 2014-07-02 NA
#> 13 1015 TDOSE 247 NA NA 2014-01-02 2014-07-02 OVERALL
#> 14 1017 TDOSE 195 NA NA 2014-01-05 2014-07-02 OVERALL
# average dose in w2-24
adex %>%
derive_param_exposure(
dataset_add = adex,
by_vars = exprs(USUBJID),
filter_add = VISIT %in% c("WEEK 2", "WEEK 24"),
set_values_to = exprs(
PARAMCD = "AVDW224",
PARCAT1 = "WEEK2-24",
AVAL = mean(AVAL, na.rm = TRUE)
),
input_code = "DOSE"
) %>%
select(-ASTDTM, -AENDTM)
#> # A tibble: 14 × 8
#> USUBJID PARAMCD AVAL AVALC VISIT ASTDT AENDT PARCAT1
#> <chr> <chr> <dbl> <chr> <chr> <date> <date> <chr>
#> 1 1015 DOSE 80 NA BASELINE 2014-01-02 2014-01-16 NA
#> 2 1015 DOSE 85 NA WEEK 2 2014-01-17 2014-06-18 NA
#> 3 1015 DOSE 82 NA WEEK 24 2014-06-19 2014-07-02 NA
#> 4 1015 ADJ NA NA BASELINE 2014-01-02 2014-01-16 NA
#> 5 1015 ADJ NA NA WEEK 2 2014-01-17 2014-06-18 NA
#> 6 1015 ADJ NA NA WEEK 24 2014-06-19 2014-07-02 NA
#> 7 1017 DOSE 80 NA BASELINE 2014-01-05 2014-01-19 NA
#> 8 1017 DOSE 50 NA WEEK 2 2014-01-20 2014-05-10 NA
#> 9 1017 DOSE 65 NA WEEK 24 2014-05-10 2014-07-02 NA
#> 10 1017 ADJ NA NA BASELINE 2014-01-05 2014-01-19 NA
#> 11 1017 ADJ NA ADVERSE EVENT WEEK 2 2014-01-20 2014-05-10 NA
#> 12 1017 ADJ NA NA WEEK 24 2014-05-10 2014-07-02 NA
#> 13 1015 AVDW224 83.5 NA NA 2014-01-17 2014-07-02 WEEK2-24
#> 14 1017 AVDW224 57.5 NA NA 2014-01-20 2014-07-02 WEEK2-24
# Any dose adjustment?
adex %>%
derive_param_exposure(
dataset_add = adex,
by_vars = exprs(USUBJID),
set_values_to = exprs(
PARAMCD = "TADJ",
PARCAT1 = "OVERALL",
AVALC = if_else(sum(!is.na(AVALC)) > 0, "Y", NA_character_)
),
input_code = "ADJ"
) %>%
select(-ASTDTM, -AENDTM)
#> # A tibble: 14 × 8
#> USUBJID PARAMCD AVAL AVALC VISIT ASTDT AENDT PARCAT1
#> <chr> <chr> <dbl> <chr> <chr> <date> <date> <chr>
#> 1 1015 DOSE 80 NA BASELINE 2014-01-02 2014-01-16 NA
#> 2 1015 DOSE 85 NA WEEK 2 2014-01-17 2014-06-18 NA
#> 3 1015 DOSE 82 NA WEEK 24 2014-06-19 2014-07-02 NA
#> 4 1015 ADJ NA NA BASELINE 2014-01-02 2014-01-16 NA
#> 5 1015 ADJ NA NA WEEK 2 2014-01-17 2014-06-18 NA
#> 6 1015 ADJ NA NA WEEK 24 2014-06-19 2014-07-02 NA
#> 7 1017 DOSE 80 NA BASELINE 2014-01-05 2014-01-19 NA
#> 8 1017 DOSE 50 NA WEEK 2 2014-01-20 2014-05-10 NA
#> 9 1017 DOSE 65 NA WEEK 24 2014-05-10 2014-07-02 NA
#> 10 1017 ADJ NA NA BASELINE 2014-01-05 2014-01-19 NA
#> 11 1017 ADJ NA ADVERSE EVENT WEEK 2 2014-01-20 2014-05-10 NA
#> 12 1017 ADJ NA NA WEEK 24 2014-05-10 2014-07-02 NA
#> 13 1015 TADJ NA NA NA 2014-01-02 2014-07-02 OVERALL
#> 14 1017 TADJ NA Y NA 2014-01-05 2014-07-02 OVERALL