Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```{r setup}
- library(tidyverse)
- library(RcppRoll)
- ```
- ```{r function}
- splatter <- function(var, fun, n = 10, ...) {
- args <- quos(...)
- var <- enquo(var)
- fun <- enquo(fun)
- if(length(n) == 1) {
- i <- seq_len(n)
- } else {
- i <- n
- }
- map( i, ~quo(UQ(fun)(!!var, !!.x, !!!args)) ) %>%
- set_names(sprintf("%s_%s_%s", quo_text(var), quo_text(fun), i))
- }
- ```
- ```{r output}
- library(gapminder)
- rolls <- splatter(lifeExp, roll_mean, c(2, 3, 5), fill = NA)
- gapminder %>% group_by(country) %>% mutate(!!!rolls) %>%
- select(country, year, matches("roll_mean"))
- # A tibble: 1,704 x 5
- # Groups: country [142]
- country year lifeExp_roll_mean_2 lifeExp_roll_mean_3 lifeExp_roll_mean_5
- <fct> <int> <dbl> <dbl> <dbl>
- 1 Afghanistan 1952 29.6 NA NA
- 2 Afghanistan 1957 31.2 30.4 NA
- 3 Afghanistan 1962 33.0 32.1 32.2
- 4 Afghanistan 1967 35.1 34.0 34.2
- 5 Afghanistan 1972 37.3 36.2 36.1
- 6 Afghanistan 1977 39.1 38.1 37.8
- 7 Afghanistan 1982 40.3 39.7 39.4
- 8 Afghanistan 1987 41.2 40.8 40.5
- 9 Afghanistan 1992 41.7 41.4 41.2
- 10 Afghanistan 1997 41.9 41.9 42.0
- # ... with 1,694 more rows
- ```
Add Comment
Please, Sign In to add comment