-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdplyr_verbs.R
87 lines (72 loc) · 2.09 KB
/
dplyr_verbs.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
#' Filter
#'
#' This is a wrapper function to dplyr::filter which can be applied to an actframe object
#'
#' @param .data an actframe object
#' @param ... Logical predicates defined in terms of the variables in .data
#'
#' @return an actframe object
#'
#' @examples
#' \dontrun{
#'
#' # get actframe, all activities
#' stoken <- httr::config(token = strava_oauth(app_name, app_client_id, app_secret, cache = TRUE))
#' my_acts <- get_activity_list(stoken)
#' act_data <- compile_activities(my_acts)
#'
#' # mutate
#' act_data %>% filter(name %in% 'Morning Ride')
#' }
filter.actframe <- function(.data,...) {
# capture classes
old_classes <- class(.data)
# capture attributes
unit_type <- attr(.data,'unit_type')
unit_vals <- attr(.data,'unit_vals')
# strip actframe class
class(.data) <- old_classes[!old_classes == 'actframe']
# perform operation
.data <- .data %>% dplyr::filter(...)
# add back actframe class
class(.data) <- c('actframe',class(.data))
attr(.data,'unit_type') <- unit_type
attr(.data,'unit_vals') <- unit_vals
return(.data)
}
#' Mutate
#'
#' This is a wrapper function to dplyr::mutate which can be applied to an actframe object
#'
#' @param .data an actframe object
#' @param ... Name-value pairs of expressions. Use NULL to drop a variable.
#'
#' @return an actframe object
#'
#' @examples
#' \dontrun{
#'
#' # get actframe, all activities
#' stoken <- httr::config(token = strava_oauth(app_name, app_client_id, app_secret, cache = TRUE))
#' my_acts <- get_activity_list(stoken)
#' act_data <- compile_activities(my_acts)
#'
#' # mutate
#' act_data %>% mutate(is_run=type=='Run')
#' }
mutate.actframe <- function(.data,...) {
# capture classes
old_classes <- class(.data)
# capture attributes
unit_type <- attr(.data,'unit_type')
unit_vals <- attr(.data,'unit_vals')
# strip actframe class
class(.data) <- old_classes[!old_classes == 'actframe']
# perform operation
.data <- dplyr::mutate(.data,...)
# add back actframe class
class(.data) <- c('actframe',class(.data))
attr(.data,'unit_type') <- unit_type
attr(.data,'unit_vals') <- unit_vals
return(.data)
}