Skip to content

Instantly share code, notes, and snippets.

@DavisVaughan
Created August 31, 2020 12:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DavisVaughan/538b96d7e847b6841746d731266339fb to your computer and use it in GitHub Desktop.
Save DavisVaughan/538b96d7e847b6841746d731266339fb to your computer and use it in GitHub Desktop.
library(slider)
library(dplyr)
library(lubridate)
library(tidyr)
x <- as.Date(c(paste0(2008:2014, "-01-01"), paste0(2008:2014, "-01-02")))
x <- sort(x)
df <- data.frame(x = x)
df <- mutate(df, year = year(x))
df
#> x year
#> 1 2008-01-01 2008
#> 2 2008-01-02 2008
#> 3 2009-01-01 2009
#> 4 2009-01-02 2009
#> 5 2010-01-01 2010
#> 6 2010-01-02 2010
#> 7 2011-01-01 2011
#> 8 2011-01-02 2011
#> 9 2012-01-01 2012
#> 10 2012-01-02 2012
#> 11 2013-01-01 2013
#> 12 2013-01-02 2013
#> 13 2014-01-01 2014
#> 14 2014-01-02 2014
df_nested <- nest(df, data = -year)
df_nested
#> # A tibble: 7 x 2
#> year data
#> <dbl> <list>
#> 1 2008 <tibble [2 × 1]>
#> 2 2009 <tibble [2 × 1]>
#> 3 2010 <tibble [2 × 1]>
#> 4 2011 <tibble [2 × 1]>
#> 5 2012 <tibble [2 × 1]>
#> 6 2013 <tibble [2 × 1]>
#> 7 2014 <tibble [2 × 1]>
# Current year + 2 years before
# Step forward by 2 years between each result
# Only compute on "complete" sets of years
slide(df_nested, identity, .before = 2, .step = 2, .complete = TRUE)
#> [[1]]
#> NULL
#>
#> [[2]]
#> NULL
#>
#> [[3]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2008 <tibble [2 × 1]>
#> 2 2009 <tibble [2 × 1]>
#> 3 2010 <tibble [2 × 1]>
#>
#> [[4]]
#> NULL
#>
#> [[5]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2010 <tibble [2 × 1]>
#> 2 2011 <tibble [2 × 1]>
#> 3 2012 <tibble [2 × 1]>
#>
#> [[6]]
#> NULL
#>
#> [[7]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2012 <tibble [2 × 1]>
#> 2 2013 <tibble [2 × 1]>
#> 3 2014 <tibble [2 × 1]>
indices <- seq(2008, 2014, by = 2)
starts <- indices[-length(indices)]
stops <- indices[-1]
starts
#> [1] 2008 2010 2012
stops
#> [1] 2010 2012 2014
hop_index(
.x = df_nested,
.i = df_nested$year,
.starts = starts,
.stops = stops,
.f = identity
)
#> [[1]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2008 <tibble [2 × 1]>
#> 2 2009 <tibble [2 × 1]>
#> 3 2010 <tibble [2 × 1]>
#>
#> [[2]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2010 <tibble [2 × 1]>
#> 2 2011 <tibble [2 × 1]>
#> 3 2012 <tibble [2 × 1]>
#>
#> [[3]]
#> # A tibble: 3 x 2
#> year data
#> <dbl> <list>
#> 1 2012 <tibble [2 × 1]>
#> 2 2013 <tibble [2 × 1]>
#> 3 2014 <tibble [2 × 1]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment