Adds a Parameter Computed from the Analysis Value of Other Parameters
Source:R/derive_param_computed.R
derive_param_computed.Rd
Adds a parameter computed from the analysis value of other parameters. It is expected that the analysis value of the new parameter is defined by an expression using the analysis values of other parameters. For example mean arterial pressure (MAP) can be derived from systolic (SYSBP) and diastolic blood pressure (DIABP) with the formula $$MAP = \frac{SYSBP + 2 DIABP}{3}$$
Usage
derive_param_computed(
dataset,
by_vars,
parameters,
analysis_value,
set_values_to,
filter = NULL,
constant_by_vars = NULL,
constant_parameters = NULL
)
Arguments
- dataset
Input dataset
The variables specified by the
by_vars
parameter,PARAMCD
, andAVAL
are expected.The variable specified by
by_vars
andPARAMCD
must be a unique key of the input dataset after restricting it by the filter condition (filter
parameter) and to the parameters specified byparameters
.- by_vars
Grouping variables
For each group defined by
by_vars
an observation is added to the output dataset. Only variables specified inby_vars
will be populated in the newly created records.Permitted Values: list of variables
- parameters
Required parameter codes
It is expected that all parameter codes (
PARAMCD
) which are required to derive the new parameter are specified for this parameter or theconstant_parameters
parameter.Permitted Values: A character vector of
PARAMCD
values- analysis_value
Definition of the analysis value
An expression defining the analysis value (
AVAL
) of the new parameter is expected. The analysis values of the parameters specified byparameters
can be accessed usingAVAL.<parameter code>
, e.g.,AVAL.SYSBP
.Permitted Values: An unquoted expression
- set_values_to
Variables to be set
The specified variables are set to the specified values for the new observations. For example
exprs(PARAMCD = "MAP")
defines the parameter code for the new parameter.Permitted Values: List of variable-value pairs
- filter
Filter condition
The specified condition is applied to the input dataset before deriving the new parameter, i.e., only observations fulfilling the condition are taken into account.
Permitted Values: a condition
- constant_by_vars
By variables for constant parameters
The constant parameters (parameters that are measured only once) are merged to the other parameters using the specified variables. (Refer to Example 2)
Permitted Values: list of variables
- constant_parameters
Required constant parameter codes
It is expected that all the parameter codes (
PARAMCD
) which are required to derive the new parameter and are measured only once are specified here. For example if BMI should be derived and height is measured only once while weight is measured at each visit. Height could be specified in theconstant_parameters
parameter. (Refer to Example 2)Permitted Values: A character vector of
PARAMCD
values
Value
The input dataset with the new parameter added. Note, a variable will only
be populated in the new parameter rows if it is specified in by_vars
.
Details
For each group (with respect to the variables specified for the
by_vars
parameter) an observation is added to the output dataset if the
filtered input dataset contains exactly one observation for each parameter
code specified for parameters
.
For the new observations AVAL
is set to the value specified by
analysis_value
and the variables specified for set_values_to
are set to
the provided values. The values of the other variables of the input dataset
are set to NA
.
See also
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_doseint()
,
derive_param_exist_flag()
,
derive_param_exposure()
,
derive_param_extreme_event()
,
derive_param_framingham()
,
derive_param_map()
,
derive_param_qtc()
,
derive_param_rr()
,
derive_param_wbc_abs()
,
derive_summary_records()
Examples
library(tibble)
# Example 1: Derive MAP
advs <- tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~AVALU, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 51, "mmHg", "BASELINE",
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 50, "mmHg", "WEEK 2",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "mmHg", "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "mmHg", "WEEK 2",
"01-701-1028", "DIABP", "Diastolic Blood Pressure (mmHg)", 79, "mmHg", "BASELINE",
"01-701-1028", "DIABP", "Diastolic Blood Pressure (mmHg)", 80, "mmHg", "WEEK 2",
"01-701-1028", "SYSBP", "Systolic Blood Pressure (mmHg)", 130, "mmHg", "BASELINE",
"01-701-1028", "SYSBP", "Systolic Blood Pressure (mmHg)", 132, "mmHg", "WEEK 2"
)
derive_param_computed(
advs,
by_vars = exprs(USUBJID, VISIT),
parameters = c("SYSBP", "DIABP"),
analysis_value = (AVAL.SYSBP + 2 * AVAL.DIABP) / 3,
set_values_to = exprs(
PARAMCD = "MAP",
PARAM = "Mean Arterial Pressure (mmHg)",
AVALU = "mmHg"
)
)
#> # A tibble: 12 x 6
#> USUBJID PARAMCD PARAM AVAL AVALU VISIT
#> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 01-701-1015 DIABP Diastolic Blood Pressure (mmHg) 51 mmHg BASELINE
#> 2 01-701-1015 DIABP Diastolic Blood Pressure (mmHg) 50 mmHg WEEK 2
#> 3 01-701-1015 SYSBP Systolic Blood Pressure (mmHg) 121 mmHg BASELINE
#> 4 01-701-1015 SYSBP Systolic Blood Pressure (mmHg) 121 mmHg WEEK 2
#> 5 01-701-1028 DIABP Diastolic Blood Pressure (mmHg) 79 mmHg BASELINE
#> 6 01-701-1028 DIABP Diastolic Blood Pressure (mmHg) 80 mmHg WEEK 2
#> 7 01-701-1028 SYSBP Systolic Blood Pressure (mmHg) 130 mmHg BASELINE
#> 8 01-701-1028 SYSBP Systolic Blood Pressure (mmHg) 132 mmHg WEEK 2
#> 9 01-701-1015 MAP Mean Arterial Pressure (mmHg) 74.3 mmHg BASELINE
#> 10 01-701-1015 MAP Mean Arterial Pressure (mmHg) 73.7 mmHg WEEK 2
#> 11 01-701-1028 MAP Mean Arterial Pressure (mmHg) 96 mmHg BASELINE
#> 12 01-701-1028 MAP Mean Arterial Pressure (mmHg) 97.3 mmHg WEEK 2
# Example 2: Derive BMI where height is measured only once
advs <- tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~AVALU, ~VISIT,
"01-701-1015", "HEIGHT", "Height (cm)", 147, "cm", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.0, "kg", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.4, "kg", "BASELINE",
"01-701-1015", "WEIGHT", "Weight (kg)", 53.1, "kg", "WEEK 2",
"01-701-1028", "HEIGHT", "Height (cm)", 163, "cm", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 78.5, "kg", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.3, "kg", "BASELINE",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.7, "kg", "WEEK 2"
)
derive_param_computed(
advs,
by_vars = exprs(USUBJID, VISIT),
parameters = "WEIGHT",
analysis_value = AVAL.WEIGHT / (AVAL.HEIGHT / 100)^2,
set_values_to = exprs(
PARAMCD = "BMI",
PARAM = "Body Mass Index (kg/m^2)",
AVALU = "kg/m^2"
),
constant_parameters = c("HEIGHT"),
constant_by_vars = exprs(USUBJID)
)
#> # A tibble: 14 x 6
#> USUBJID PARAMCD PARAM AVAL AVALU VISIT
#> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 01-701-1015 HEIGHT Height (cm) 147 cm SCREENING
#> 2 01-701-1015 WEIGHT Weight (kg) 54 kg SCREENING
#> 3 01-701-1015 WEIGHT Weight (kg) 54.4 kg BASELINE
#> 4 01-701-1015 WEIGHT Weight (kg) 53.1 kg WEEK 2
#> 5 01-701-1028 HEIGHT Height (cm) 163 cm SCREENING
#> 6 01-701-1028 WEIGHT Weight (kg) 78.5 kg SCREENING
#> 7 01-701-1028 WEIGHT Weight (kg) 80.3 kg BASELINE
#> 8 01-701-1028 WEIGHT Weight (kg) 80.7 kg WEEK 2
#> 9 01-701-1015 BMI Body Mass Index (kg/m^2) 25.0 kg/m^2 SCREENING
#> 10 01-701-1015 BMI Body Mass Index (kg/m^2) 25.2 kg/m^2 BASELINE
#> 11 01-701-1015 BMI Body Mass Index (kg/m^2) 24.6 kg/m^2 WEEK 2
#> 12 01-701-1028 BMI Body Mass Index (kg/m^2) 29.5 kg/m^2 SCREENING
#> 13 01-701-1028 BMI Body Mass Index (kg/m^2) 30.2 kg/m^2 BASELINE
#> 14 01-701-1028 BMI Body Mass Index (kg/m^2) 30.4 kg/m^2 WEEK 2