У меня есть фрейм данных
library(data.table)
dt <- data.table(Customer = c("a", "a", "c"),
count = c(3, 4, 5),
Date = c("2019-02-01","2019-05-01","2019-10-01"))
Customer count Date
1: a 3 2019-02-01
2: a 4 2019-05-01
3: c 5 2019-10-01
Я реплицирую этот фрейм данных путем подсчета, используя:
dt[rep(seq(1, nrow(dt)), dt$count)]
Customer count Date
1: a 3 2019-02-01
2: a 3 2019-02-01
3: a 3 2019-02-01
4: a 4 2019-05-01
5: a 4 2019-05-01
6: a 4 2019-05-01
7: a 4 2019-05-01
8: c 5 2019-10-01
9: c 5 2019-10-01
10: c 5 2019-10-01
11: c 5 2019-10-01
12: c 5 2019-10-01
и далее с помощью months
для увеличения поля месяца
dt %>%
group_by(Customer) %>%
mutate(Date = as.Date(Date[1]) + months(seq(0, length.out = n(), by = 3)))
Customer count Date
<chr> <dbl> <date>
1 a 3 2019-02-01
2 a 3 2019-05-01
3 a 3 2019-08-01
4 a 4 2019-11-01
5 a 4 2020-02-01
6 a 4 2020-05-01
7 a 4 2020-08-01
8 c 5 2019-10-01
9 c 5 2020-01-01
10 c 5 2020-04-01
11 c 5 2020-07-01
12 c 5 2020-10-01
Однако дата в строке 4 является шагом 3-й строки (поскольку она сгруппирована по клиенту, и в этом случае имена клиентов совпадают). Я ищу, чтобы получить вывод, который начинается на «2019-05-01», который является исходной датой против исходного фрейма данных. Поэтому я надеюсь получить что-то вроде этого:
Customer count Date
<chr> <dbl> <date>
1 a 3 2019-02-01
2 a 3 2019-05-01
3 a 3 2019-08-01
4 a 4 2019-05-01
5 a 4 2019-08-01
6 a 4 2019-11-01
7 a 4 2020-02-01
8 c 5 2019-10-01
9 c 5 2020-01-01
10 c 5 2020-04-01
11 c 5 2020-07-01
12 c 5 2020-10-01