Is this the output you're looking for?:
# A tibble: 26 x 4
Min sport Xox period
<int> <int> <int> <date>
1 2 4 50 2017-07-01
2 NA 2 50 2017-02-01
3 NA 2 45 2017-01-01
4 NA NA 10 2015-12-01
5 NA 3 53 2017-03-01
...
If so here's the code:
library(dplyr)
library(purrr)
library(lubridate)
library(tidyr)
unique(foo$Date) %>%
map(~foo %>%
filter(Date >= (ymd(.x) - dyears(1)) & Date <= .x) %>%
group_by(ID, Group) %>%
count() %>%
group_by(Group) %>%
count() %>%
spread(Group, nn) %>%
mutate(period = .x)) %>%
bind_rows()
foo <- readr::read_csv(
"ID,Date,Group
D_2313,2017-07-01,Xox
D_2416,2017-07-01,Xox
D_446,2017-02-01,Xox
D_3466,2017-07-01,Xox
D_1183,2017-01-01,Xox
D_3751,2015-12-01,Xox
D_76,2017-03-01,sport
D_441,2015-10-01,Xox
D_1417,2017-02-01,Xox
D_2886,2016-12-01,Xox
D_1027,2016-03-01,Xox
D_1955,2016-05-01,Xox
D_1227,2017-04-01,Xox
D_371,2016-11-01,Xox
D_293,2017-10-01,sport
D_2712,2016-12-01,Xox
D_1122,2016-06-01,Xox
D_839,2015-11-01,Xox
D_83,2016-10-01,Xox
D_3286,2016-03-01,Xox
D_1216,2017-09-01,Xox
D_3182,2017-07-01,Xox
D_376,2017-09-01,Xox
D_946,2016-11-01,Xox
D_2585,2017-06-01,Xox
D_162,2017-03-01,Xox
D_2485,2017-05-01,Min
D_1994,2017-05-01,sport
D_543,2016-12-01,Xox
D_3338,2016-07-01,Xox
D_72,2016-10-01,Xox
D_840,2016-04-01,Xox
D_331,2016-01-01,Xox
D_2644,2017-11-01,Xox
D_2884,2016-12-01,Xox
D_2626,2017-03-01,Xox
D_2937,2017-09-01,Xox
D_2818,2017-02-01,Xox
D_3636,2017-10-01,Xox
D_1103,2016-12-01,Xox
D_1922,2015-11-01,Xox
D_1088,2017-05-01,Xox
D_3460,2016-09-01,Xox
D_1465,2016-07-01,Xox
D_1974,2016-06-01,Xox
D_3525,2015-10-01,Xox
D_2650,2017-04-01,sport
D_2691,2017-02-01,Xox
D_3616,2017-03-01,Xox
D_1104,2016-10-01,Xox
D_1533,2017-10-01,Xox
D_3431,2016-06-01,Xox
D_3458,2016-09-01,Xox
D_1632,2016-10-01,Xox
D_687,2017-01-01,Xox
D_2560,2016-03-01,Xox
D_1545,2016-03-01,Xox
D_3073,2016-02-01,Xox
D_468,2017-02-01,Xox
D_2891,2015-12-01,Xox
D_2479,2016-05-01,Xox
D_254,2016-11-01,Xox
D_2410,2017-10-01,Xox
D_3633,2016-09-01,Xox
D_2773,2017-05-01,Xox
D_749,2016-09-01,Xox
D_3259,2017-02-01,Xox
D_143,2015-11-01,Xox
D_3272,2016-01-01,Xox
D_545,2016-05-01,Xox
D_1684,2017-09-01,Xox
D_341,2017-09-01,Xox
D_3351,2016-12-01,Xox
D_2127,2016-04-01,Xox
D_1364,2016-03-01,Xox
D_3500,2017-06-01,Xox
D_2290,2016-12-01,sport
D_2847,2015-11-01,Xox
D_724,2017-09-01,Xox
D_2111,2017-02-01,Xox
D_2225,2017-06-01,Xox
D_720,2016-01-01,Xox
D_2709,2016-06-01,Xox
D_1648,2015-12-01,Xox
D_3251,2016-10-01,Xox
D_184,2017-06-01,Xox
D_961,2016-07-01,Xox
D_2671,2016-08-01,Xox
D_3217,2017-05-01,Xox
D_1077,2016-04-01,Xox
D_1290,2016-05-01,sport
D_3637,2017-08-01,Xox
D_436,2016-10-01,Xox
D_3819,2017-08-01,sport
D_25,2015-10-01,Xox
D_739,2017-05-01,Min
D_3697,2016-08-01,Xox
D_1851,2016-11-01,Xox
D_50,2016-07-01,Xox
D_1286,2016-02-01,Xox"
)