-
Notifications
You must be signed in to change notification settings - Fork 54
/
gg-miss-case.R
91 lines (75 loc) · 2.58 KB
/
gg-miss-case.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
#' Plot the number of missings per case (row)
#'
#' This is a visual analogue to `miss_case_summary`. It draws a ggplot of the
#' number of missings in each case (row). A default minimal theme is used, which
#' can be customised as normal for ggplot.
#'
#' @param x data.frame
#' @param facet (optional) a single bare variable name, if you want to create a faceted plot.
#' @param order_cases logical Order the rows by missingness (default is FALSE -
#' no order).
#'
#' @return a ggplot object depicting the number of missings in a given case.
#'
#' @seealso [geom_miss_point()] [gg_miss_case_cumsum] [gg_miss_fct()] [gg_miss_span()] [gg_miss_var()] [gg_miss_var_cumsum()] [gg_miss_which()]
#'
#' @export
#'
#' @examples
#'
#' gg_miss_case(airquality)
#' library(ggplot2)
#' gg_miss_case(airquality) + labs(x = "Number of Cases")
#' gg_miss_case(airquality, order_cases = TRUE)
#' gg_miss_case(airquality, facet = Month)
#' gg_miss_case(airquality, facet = Month, order_cases = TRUE)
#'
gg_miss_case <- function(x, facet, order_cases = FALSE){
if (!missing(facet)) {
quo_group_by <- rlang::enquo(facet)
group_string <- deparse(substitute(facet))
}
if (order_cases & missing(facet)) {
ggobject <-
x %>%
miss_case_summary(order = TRUE) %>%
# overwrite case
dplyr::mutate(case = 1:n()) %>%
gg_miss_case_create()
} else if (!order_cases & missing(facet)) {
ggobject <- x %>%
miss_case_summary() %>%
gg_miss_case_create()
} else if (order_cases & !missing(facet)) {
ggobject <- x %>%
dplyr::group_by(!!quo_group_by) %>%
# overwrite case
miss_case_summary(order = TRUE) %>%
dplyr::mutate(case = 1:n()) %>%
gg_miss_case_create() +
facet_wrap(as.formula(paste("~", group_string)))
} else if (!order_cases & !missing(facet)) {
ggobject <- x %>%
dplyr::group_by(!!quo_group_by) %>%
miss_case_summary() %>%
gg_miss_case_create() +
facet_wrap(as.formula(paste("~", group_string)))
}
return(ggobject)
}
# utility function to create the starting block for gg_miss_case ---------------
gg_miss_case_create <- function(data){
ggplot(data = data,
aes(x = case,
# possibly include an if() statement here to change `n_miss` to
# `pct_miss` when the appropriate indicator is passed through
y = n_miss)) +
geom_col(width = 1,
colour = "#484878", # lorikeet purple
fill = "#484878") + # lorikeet purple
coord_flip() +
labs(y = "# Missing",
x = "Cases") +
theme_minimal() +
scale_x_reverse()
}