-
Notifications
You must be signed in to change notification settings - Fork 10
/
features.R
122 lines (115 loc) · 3.44 KB
/
features.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
#' Calculate features of a `tsibble` object in conjunction with [features()]
#'
#' You can calculate a series of summary statistics (features) of a given
#' variable for a dataset. For example, a three number summary, the minimum,
#' median, and maximum, can be calculated for a given variable. This is
#' designed to work with the [features()] function shown in the examples.
#' Other available features in `brolgar` include:
#'
#' - [feat_three_num()] - minimum, median, maximum
#' - [feat_five_num()] - minimum, q25, median, q75, maximum.
#' - [feat_ranges()] - min, max, range difference, interquartile range.
#' - [feat_spread()] - variance, standard deviation, median absolute distance,
#' and interquartile range
#' - [feat_monotonic()] - is it always increasing, decreasing, or unvarying?
#' - [feat_diff_summary()] - the summary statistics of the differences
#' amongst a value, including the five number summary, as well as the
#' standard deviation and variance. Returns NA if there is only one
#' observation, as we can't take the difference of one observation, and a
#' difference of 0 in these cases would be misleading.
#'
#' - [feat_brolgar()] all features in brolgar.
#'
#' @param x A vector to extract features from.
#' @param ... Further arguments passed to other functions.
#' @name brolgar-features
#' @examples
#'
#' # You can use any of the features `feat_*` in conjunction with `features`
#' # like so:
#' heights %>%
#' features(height_cm, # variable you want to explore
#' feat_three_num) # the feature summarisation you want to perform
#' @rdname brolgar-features
#' @export
feat_three_num <- function(x, ...) {
c(min = b_min(x, ...),
med = b_median(x, ...),
max = b_max(x, ...))
}
#' @rdname brolgar-features
#' @export
feat_five_num <- function(x, ...) {
c(
min = b_min(x, ...),
q25 = b_q25(x, ...),
med = b_median(x, ...),
q75 = b_q75(x, ...),
max = b_max(x, ...)
)
}
#' @rdname brolgar-features
#' @export
feat_ranges <- function(x, ...){
c(
min = b_min(x, ...),
max = b_max(x, ...),
range_diff = b_range_diff(x, ...),
iqr = b_iqr(x, ...)
)
}
#' @rdname brolgar-features
#' @export
feat_spread <- function(x, ...){
c(
var = b_var(x, ...),
sd = b_sd(x, ...),
mad = b_mad(x, ...),
iqr = b_iqr(x, ...)
)
}
#' @rdname brolgar-features
#' @export
feat_monotonic <- function(x, ...) {
c(increase = increasing(x, ...),
decrease = decreasing(x, ...),
unvary = unvarying(x, ...),
monotonic = monotonic(x, ...))
}
#' @rdname brolgar-features
#' @export
feat_brolgar <- function(x, ...){
c(
min = b_min(x, ...),
max = b_max(x, ...),
median = b_median(x, ...),
mean = b_mean(x, ...),
q25 = b_q25(x, ...),
q75 = b_q75(x, ...),
range = b_range(x, ...),
range_diff = b_range_diff(x, ...),
sd = b_sd(x, ...),
var = b_var(x, ...),
mad = b_mad(x, ...),
iqr = b_iqr(x, ...),
increase = increasing(x, ...),
decrease = decreasing(x, ...),
unvary = unvarying(x, ...),
feat_diff_summary(x, ...)
)
}
#' @rdname brolgar-features
#' @export
feat_diff_summary <- function(x, ...){
c(
diff_min = b_diff_min(x, ...),
diff_q25 = b_diff_q25(x, ...),
diff_median = b_diff_median(x, ...),
diff_mean = b_diff_mean(x, ...),
diff_q75 = b_diff_q75(x, ...),
diff_max = b_diff_max(x, ...),
diff_var = b_diff_var(x, ...),
diff_sd = b_diff_sd(x, ...),
diff_iqr = b_diff_iqr(x, ...)
)
}