Попробуйте это:
# quick helper function
date2qtr <- function(d) 1 + (as.integer(format(d, "%m")) - 1) %/% 3L
library(dplyr)
# library(tidyr)
# library(purrr)
tbl_df(df) %>%
mutate(
alldates = purrr::map2(Hire.Date, Termination.Date,
~ seq.Date(..1, ..2, by = "3 months"))
) %>%
tidyr::unnest() %>%
mutate(
Year = as.integer(format(alldates, "%Y")),
Quarter = date2qtr(alldates)
) %>%
group_by(Year, Quarter) %>%
tally()
# # A tibble: 25 x 3
# # Groups: Year [?]
# Year Quarter n
# <int> <dbl> <int>
# 1 2002 2 1
# 2 2002 3 1
# 3 2002 4 1
# 4 2003 1 1
# 5 2003 2 1
# 6 2003 3 1
# 7 2003 4 1
# 8 2004 1 1
# 9 2004 2 1
# 10 2004 3 1
# # ... with 15 more rows
Данные:
df <- structure(list(PositionName = c("CBM", "CBM", "SBM", "CBM", "SBM",
"CBM"), Hire.Date = c("4/22/2002", "10/5/2005", "10/31/2005",
"12/1/2005", "7/6/2006", "10/6/2006"), Termination.Date = c("9/14/2007",
"5/5/2008", "6/25/2007", "5/5/2008", "6/20/2008", "6/30/2008"
)), class = "data.frame", row.names = c("1", "2", "3", "4", "5",
"6"))
df[c("Hire.Date","Termination.Date")] <-
lapply(df[c("Hire.Date","Termination.Date")], as.Date, format = "%m/%d/%Y")