Создавать даты за 21 день до и после даты индекса в data.table - PullRequest
0 голосов
/ 05 августа 2020

У меня есть фрейм данных с 10 000+ датами. например,

indexdt
01-02-2019
08-15-2019

Мне нужно создать фреймы данных, чтобы я получал тот же день недели, до 3 недель до и после даты индекса. Созданные даты не должны включать дату индекса. Итоговая таблица

indexdt       dates
01-02-2019  12-26-2018
01-02-2019  12-19-2018
01-02-2019  12-12-2018
01-02-2019  01-09-2019
01-02-2019  01-16-2019
01-02-2019  01-23-2019
08-15-2019  07-25-2019
08-15-2019  08-01-2019
08-15-2019  08-08-2019
08-15-2019  08-22-2019
08-15-2019  08-29-2019
08-15-2019  08-05-2019

Я ищу решение data.table.

1 Ответ

1 голос
/ 05 августа 2020
DT[, indexdt := as.Date(indexdt, "%m-%d-%Y")]
DT[, .(dates = indexdt + 7 * c(-3:-1, 1:3)), by = indexdt]

#        indexdt      dates
#  1: 2019-01-02 2018-12-12
#  2: 2019-01-02 2018-12-19
#  3: 2019-01-02 2018-12-26
#  4: 2019-01-02 2019-01-09
#  5: 2019-01-02 2019-01-16
#  6: 2019-01-02 2019-01-23
#  7: 2019-08-15 2019-07-25
#  8: 2019-08-15 2019-08-01
#  9: 2019-08-15 2019-08-08
# 10: 2019-08-15 2019-08-22
# 11: 2019-08-15 2019-08-29
# 12: 2019-08-15 2019-09-05

Если вы предпочитаете сохранять исходное форматирование даты (в виде строк)

DT[, .(dates = indexdt + 7 * c(-3:-1, 1:3)), by = indexdt
   ][, lapply(.SD, format, "%m-%d-%Y")]

#        indexdt      dates
#  1: 01-02-2019 12-12-2018
#  2: 01-02-2019 12-19-2018
#  3: 01-02-2019 12-26-2018
#  ...

Data

DT <- data.table(
  indexdt = c("01-02-2019", "08-15-2019")
)
...