I would like to know where there is any built-in function for us to "pack" a sequence of dplyr
operations into one object, such that the operations are reusable.
Suppose this is what I want to do:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
head(cars)
#> speed dist
#> 1 4 2
#> 2 4 10
#> 3 7 4
#> 4 7 22
#> 5 8 16
#> 6 9 10
# Create a data set with same column names
n <- 100
set.seed(8701)
cars2 <- data.frame(speed = round(runif(n, 4, 50)),
dist = round(runif(n, 15, 100)))
head(cars2)
#> speed dist
#> 1 33 23
#> 2 38 95
#> 3 16 59
#> 4 26 58
#> 5 19 32
#> 6 28 17
new1 <- cars %>% filter(speed > 10) %>%
mutate(dist2 = dist * 2)
new2 <- cars2 %>% filter(speed > 10) %>%
mutate(dist2 = dist * 2)
head(new1)
#> speed dist dist2
#> 1 11 17 34
#> 2 11 28 56
#> 3 12 14 28
#> 4 12 20 40
#> 5 12 24 48
#> 6 12 28 56
head(new2)
#> speed dist dist2
#> 1 33 23 46
#> 2 38 95 190
#> 3 16 59 118
#> 4 26 58 116
#> 5 19 32 64
#> 6 28 17 34
If I want to do filter(speed > 10) %>% mutate(dist2 = dist * 2)
again and again, each time on a different data frame, can I do something like this?
to_do <- some_function(filter(speed > 10) %>%
mutate(dist2 = dist * 2))
new1 <- cars %>% to_do
new2 <- cars2 %%> to_do