Как перечислить в качестве даты 30-го числа, используя 28 или 29 февраля?
Я хочу построить список ежемесячных дат в данный день между указанными месяцами-годами. Скажем, все 15 числа месяцев с марта 2016 года по март 2018 года.
Кроме того, я хочу, чтобы переполнения, такие как 30-й день февраля, были "округлены" до последнего дня в этом месяце (а не 1 или 2 марта).
Мой код:
m <- as.POSIXlt("2018-03-30")
m$year <- m$year -2
wDate <- as.Date(seq(from = m , to = as.POSIXlt(m), by = "month"))
wDate
[1] "2016-03-30" "2016-04-30" "2016-05-30" "2016-06-30" "2016-07-30" "2016-08-30" "2016-09-30" "2016-10-30" "2016-11-30" "2016-12-30" "2017-01-30" "2017-03-02" "2017-03-30" "2017-04-30"
[15] "2017-05-30" "2017-06-30" "2017-07-30" "2017-08-30" "2017-09-30" "2017-10-30" "2017-11-30" "2017-12-30" "2018-01-30" "2018-03-02" "2018-03-30"
Как видно, вместо 2018-02-28
, это перечисляет 2018-03-02
,
Как я могу добиться желаемой настройки?
1 ответ
Для вашего первого вопроса (все 15-е числа месяца с марта 2016 года по март 2018 года) вы можете использовать seq.Date()
,
m1 <- as.Date("2016-03-15")
seq.Date(from = m1, length.out = 25, by = "month")
# [1] "2016-03-15" "2016-04-15" "2016-05-15" "2016-06-15" "2016-07-15" "2016-08-15" "2016-09-15" "2016-10-15" "2016-11-15" "2016-12-15"
#[11] "2017-01-15" "2017-02-15" "2017-03-15" "2017-04-15" "2017-05-15" "2017-06-15" "2017-07-15" "2017-08-15" "2017-09-15" "2017-10-15"
#[21] "2017-11-15" "2017-12-15" "2018-01-15" "2018-02-15" "2018-03-15"
Для вашего второго запроса (я хочу, чтобы 30-й день февраля был "округлен" до последнего дня в этом месяце), вы можете использовать %m+%
функция от lubridate
пакет.
m2 <- as.Date("2016-03-31")
library(lubridate)
m2 %m+% months(0:24)
# [1] "2016-03-31" "2016-04-30" "2016-05-31" "2016-06-30" "2016-07-31" "2016-08-31" "2016-09-30" "2016-10-31" "2016-11-30" "2016-12-31"
#[11] "2017-01-31" "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30" "2017-07-31" "2017-08-31" "2017-09-30" "2017-10-31"
#[21] "2017-11-30" "2017-12-31" "2018-01-31" "2018-02-28" "2018-03-31"
Тип ?`%m+%`
для деталей. Надеюсь это поможет.