У меня довольно сложная проблема, которую я не могу решить.
У меня есть кадр данных, который я прочитал в dplyr:
trans_id date type
9373 2019-09-29 6-months
9945 2019-08-15 3-months
9945 2019-11-13 3-months
9615 2019-12-28 3-months
11465 2019-07-13 3-months
11465 2019-10-11 3-months
Воспроизводимый пример:
library(tidyverse)
df <- data.frame(stringsAsFactors=FALSE,
id = c(9373, 9945, 9945, 9615, 11465, 11465),
date = c("2019-09-29", "2019-08-15", "2019-11-13", "2019-12-28",
"2019-07-13", "2019-10-11"),
type = c("6-months", "3-months", "3-months", "3-months", "3-months",
"3-months")) %>%
mutate(date = as.Date(date))
Каждый id
является транзакцией, произошедшей с данным date
; каждая транзакция может повторяться каждые 3 месяца или 6 месяцев - как указано в type
.
Я хочу развернуть эти транзакции в своих ежемесячных аналогах до текущей даты; это означает, что первая транзакция 9373 должна повторяться 6 раз с 30-дневным циклом (type
== 6 месяцев), начиная с 2019-09-29 до текущего дня (сегодня 2020-01-07), иначе будет только 4 разовых ежемесячных транзакции, так как последние две должны произойти.
То же самое для 3-месячных транзакций, всегда с учетом даты начала и текущей даты.
Пример конечного результата:
id date type
9373 2019-09-29 6-months # first 6-months cycle transaction
9373 2019-10-29 6-months
9373 2019-11-28 6-months
9373 2019-12-28 6-months
9945 2019-08-15 3-months #
9945 2019-09-14 3-months
9945 2019-10-14 3-months
9945 2019-11-13 3-months #
9945 2019-12-13 3-months
9615 2019-12-28 3-months #
Любая помощь высоко ценится !