generated from pharmaverse/admiraltemplate
-
Notifications
You must be signed in to change notification settings - Fork 8
/
derive_vars_max_flag.R
164 lines (157 loc) · 4.49 KB
/
derive_vars_max_flag.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#' Creating Maximum Flag
#'
#' @description To Flag the maximum records depends on the grouping variables in a flag variable.
#'
#' @param dataset Input dataset
#'
#' @param by_vars By variables which goes to group by, to create the flag. Pass the variables
#' inside the exprs().
#'
#' @param fl Flag variable name, Pass it as string.
#'
#' @return Data frame with flag variable which is flagged for the maximum value records depending on
#' the variables passed in `by_vars` by user.
#'
#' @author Dhivya Kanagaraj
#' @export
#'
#' @examples
#'
#' library(tibble)
#' library(admiral)
#'
#' input <- tribble(
#' ~USUBJID, ~FAOBJ, ~FATESTCD, ~FATPTREF, ~AVAL, ~FATPT, ~PARAMCD,
#' "ABC101", "REDNESS", "DIAMETER", "VACC 1", 10, "DAY 1", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 1", 7, "DAY 2", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 2", 3, "DAY 1", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 2", 8, "DAY 2", "DIARE",
#' "ABC101", "FATIQUE", "SEV", "VACC 1", 1, "DAY 1", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 1", 1, "DAY 2", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 2", 2, "DAY 1", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 2", 3, "DAY 2", "SEVFAT"
#' )
#'
#' max_flag(
#' dataset = input,
#' by_vars = exprs(USUBJID, FAOBJ, FATPTREF, PARAMCD),
#' fl = "ANL01FL"
#' )
#'
#' @family utils_help
#'
#' @keywords utils_help
#'
max_flag <- function(dataset,
by_vars,
fl) {
assert_vars(by_vars)
assert_data_frame(dataset,
required_vars = exprs(AVAL, FATPT)
)
temp <- dataset %>%
filter(!is.na(AVAL)) %>%
group_by(!!!by_vars) %>%
arrange(desc(AVAL), FATPT, .by_group = TRUE) %>%
filter(AVAL == max(AVAL)) %>%
mutate(
!!fl := ifelse(row_number() == 1 & AVAL > 0, "Y", NA_character_)
)
left_join(
x = dataset,
y = temp,
keep = FALSE
)
}
#' Creating ANLxxFL Variables To Flag The Maximum Records
#'
#' Adds Flags variables for maximum record per subject per event for overall
#' and per vaccination
#'
#' @param dataset Input dataset
#'
#' @param flag1 Flags the maximum record per subject per event per
#' vaccination.
#' *Permitted value: Any variable name as a string or NULL*.
#'
#' `NULL` denotes not to create the flag
#'
#' @param flag2 Flags the maximum record per subject per event for Overall
#'
#' *Permitted value: Any variable name as a string or NULL*.
#'
#' `NULL` denotes not to create the flag
#'
#' @return The output dataframe with `ANLxxFL` flags
#'
#' @author Dhivya Kanagaraj
#'
#' @details This utility flags the maximum record per subject per event
#' per vaccination/Overall
#' If both parameters `flag1` & `flag2` are passed as `NULL` then
#' utility will throw error and flags will not be created.
#'
#' @export
#'
#' @family der_var
#'
#' @keywords der_var
#'
#' @examples
#' library(dplyr)
#' library(admiraldev)
#' library(admiral)
#' library(tibble)
#'
#' input <- tribble(
#' ~USUBJID, ~FAOBJ, ~FATESTCD, ~FATPTREF, ~AVAL, ~FATPT, ~PARAMCD,
#' "ABC101", "REDNESS", "DIAMETER", "VACC 1", 10, "DAY 1", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 1", 7, "DAY 2", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 2", 3, "DAY 1", "DIARE",
#' "ABC101", "REDNESS", "DIAMETER", "VACC 2", 8, "DAY 2", "DIARE",
#' "ABC101", "FATIQUE", "SEV", "VACC 1", 1, "DAY 1", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 1", 1, "DAY 2", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 2", 2, "DAY 1", "SEVFAT",
#' "ABC101", "FATIQUE", "SEV", "VACC 2", 3, "DAY 2", "SEVFAT"
#' )
#'
#' derive_vars_max_flag(
#' dataset = input,
#' flag1 = "ANL01FL",
#' flag2 = "ANL02FL"
#' )
#' derive_vars_max_flag(
#' dataset = input,
#' flag1 = NULL,
#' flag2 = "ANL02FL"
#' )
#' derive_vars_max_flag(
#' dataset = input,
#' flag1 = "ANL01FL",
#' flag2 = NULL
#' )
#'
derive_vars_max_flag <- function(dataset,
flag1 = "ANL01FL",
flag2 = "ANL02FL") {
# Flagging maximum record per subject per event per Vaccination
assert_data_frame(dataset,
required_vars = exprs(USUBJID, FAOBJ, FATPTREF, PARAMCD)
)
if (is.null(flag1) && is.null(flag2)) {
stop("Both flag names cannot be NULL")
}
if (!is.null(flag1)) {
dataset <- max_flag(dataset,
by_vars = exprs(USUBJID, FAOBJ, FATPTREF, PARAMCD),
fl = flag1
)
}
if (!is.null(flag2)) {
dataset <- max_flag(dataset,
by_vars = exprs(USUBJID, FAOBJ, PARAMCD),
fl = flag2
)
}
return(dataset)
}