Мы можем преобразовать 'indexdt' в Date
класс, l oop по элементам, получить seq
значение дат с концом, указанным как конец месяца с помощью ceiling_date
(от lubridate
) и укажите by
как «неделя» в list
, а затем unnest
в столбце list
library(dplyr)
library(purrr)
library(lubridate)
library(tidyr)
df1 %>%
mutate(indexdt = as.Date(indexdt, "%m-%d-%Y"),
date = map(indexdt, ~ seq(.x, ceiling_date(.x, 'month'),
by = 'week')[-1])) %>%
unnest(c(date))
Или используя data.table
library(data.table)
setDT(df1)[, indexdt := as.Date(indexdt, "%m-%d-%Y")]
df1[, .(date = seq(indexdt, ceiling_date(indexdt, "month"),
by = "week")[-1]), .(indexdt)]
Для 2020 добавьте один год
df1 %>%
mutate(indexdt = as.Date(indexdt, "%m-%d-%Y"),
date = map(indexdt, ~ seq(.x + years(1),
ceiling_date(.x + years(1), 'month'), by = 'week')[-1])) %>%
unnest(c(date))
с data.table
df1[, .(date = seq(indexdt, ceiling_date(indexdt +years(1), "month"),
by = "week")[-1]), .(indexdt)]
данными
df1 <- structure(list(indexdt = c("01-02-2019", "08-15-2019")), class = "data.frame", row.names = c(NA,
-2L))