-
Notifications
You must be signed in to change notification settings - Fork 7
/
check_sc_dm_seyeselc.R
98 lines (84 loc) · 3.6 KB
/
check_sc_dm_seyeselc.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
#' @title Check SC Study Eye Selection assignments among DM patients
#'
#' @description Check if SC.SCCAT = "STUDY EYE SELECTION" and SC.SCTESTCD = "FOCID",
#' then SC.SCORRES should have "OS", "OD", or "OU" values. Flag if subject is in
#' DM and without an associated SC.SCORRES value or the STUDY EYE SELECTION value
#' is not "OS", "OD", or "OU".
#'
#' @param DM Subject Demographics SDTM dataset with variable USUBJID
#' @param SC Subject Characteristics SDTM dataset for Ophtho Study with variables
#' USUBJID, SCTESTCD, SCTEST, SCCAT, SCORRES, SCDTC
#'
#' @importFrom dplyr %>% filter mutate select
#'
#' @export
#'
#' @family OPHTH
#'
#' @keywords OPHTH
#'
#' @author Monarch Shah (HackR 2021 Team Eye)
#'
#' @examples
#'
#' dm <- data.frame(USUBJID = c(1,2))
#' sc <- data.frame(USUBJID = c(1,1,1,2,2,2),
#' SCTEST = c("Eye Meeting Eligibility Criteria",
#' "Focus of Study-Specific Interest",
#' " ",
#' "Eye Meeting Eligibility Criteria",
#' "Focus of Study-Specific Interest", " "),
#' SCTESTCD = c("ELIGEYE", "FOCID", "", "ELIGEYE", "FOCID", ""),
#' SCCAT = c("STUDY EYE SELECTION",
#' "STUDY EYE SELECTION",
#' "",
#' "STUDY EYE SELECTION",
#' "STUDY EYE SELECTION", ""),
#' SCORRES = c("LEFT", "OS", "", "RIGHT", "OD", ""),
#' SCDTC = rep("2021-01-01", 6),
#' stringsAsFactors = FALSE)
#'
#' check_sc_dm_seyeselc(SC=sc, DM=dm)
#'
#' dm <- data.frame(USUBJID = c(1,2,3,4))
#' sc <- data.frame(USUBJID = c(1,1,1,2,2,2),
#' SCTEST = c("Eye Meeting Eligibility Criteria",
#' "Focus of Study-Specific Interest",
#' " ",
#' "Eye Meeting Eligibility Criteria",
#' "Focus of Study-Specific Interest",
#' " "),
#' SCTESTCD = c("ELIGEYE", "FOCID", "", "ELIGEYE", "FOCID", ""),
#' SCCAT = c("STUDY EYE SELECTION",
#' "STUDY EYE SELECTION",
#' "",
#' "STUDY EYE SELECTION",
#' "STUDY EYE SELECTION", ""),
#' SCORRES = c("LEFT", "OS", "", "RIGHT", "", ""),
#' SCDTC = rep("2021-01-01", 6),
#' stringsAsFactors = FALSE)
#'
#' check_sc_dm_seyeselc(SC=sc, DM=dm)
#'
#'
check_sc_dm_seyeselc <- function(DM, SC) {
if (DM %lacks_any% c("USUBJID")) {
fail(lacks_msg(DM, c("USUBJID")))
}
else if (SC %lacks_any% c("USUBJID", "SCTEST", "SCTESTCD", "SCCAT", "SCORRES", "SCDTC")) {
fail(lacks_msg(SC, c("USUBJID", "SCTEST", "SCTESTCD", "SCCAT", "SCORRES", "SCDTC")))
}
else {
DM = DM %>% select(USUBJID)
SC = SC %>% select(USUBJID, SCTESTCD, SCTEST, SCCAT, SCORRES, SCDTC) %>%
mutate(MISFLAG = ifelse((grepl("FOCID", SCTESTCD, ignore.case=TRUE) == TRUE) &
(!(SCORRES %in% c("OD", "OS"))), 1, 0))
mydf = left_join(DM, SC, by="USUBJID")
mydf = mydf %>% filter(MISFLAG == 1 | is.na(SCORRES)) %>% select(-MISFLAG)
if ((nrow(mydf) > 0 ) == FALSE) {
pass()
} else {
fail(paste0(nrow(mydf), " record(s) with Study Eye Selection missing. "), mydf )
}
}
}