R: добавление 1 месяца к дате

Я хочу получить последовательность дат между startDate а также endDate добавив 1 месяц к startDate, т.е. если startDate 2013-01-31 и endDate это 2013-07-31, я бы предпочел видеть такие даты:

"2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"

я пытался seq.Date(as.Date("2013-01-31"),by="month",length.out=7), Но вывод этого кода выглядит так

> seq.Date(as.Date("2013-01-31"),by="month",length.out=7)
[1] "2013-01-31" "2013-03-03" "2013-03-31" "2013-05-01" "2013-05-31" "2013-07-01" "2013-07-31"

Итак, что является самым простым решением для получения правильного результата?

2 ответа

Решение

Я должен работать с датами в R, и один из самых полезных пакетов, которые я нашел для данных даты lubridate, Для вашей проблемы вы можете просто сделать следующее:

require(lubridate)
# ymd function parses dates in year-month-day format
startDate <- ymd('2013-01-31')
# The %m+% adds months to dates without exceeding the last day
myDates <- startDate %m+% months(c(0:6))

lubridate Также есть много других функций для дат, и я настоятельно рекомендую посмотреть.

Это не работает, потому что R не уверен, что делать с последним днем ​​месяца:) Так что у меня есть простое решение. Сделайте то же самое, но используйте 1-й день следующего месяца и затем вычтите 1:

    seq(as.Date("2013-02-1"),by="month",length.out=7)-1
[1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"
Другие вопросы по тегам