Is there an easy way to create a vector following the pattern: 1st day of the month, last day of the month, 1st day of the month etc.?

I’m trying to find an elegant way to create a vector of dates that follows a pattern like:

x <- c(ymd("2000/01/01"), ymd("2000/01/31"), ymd("2000/02/01"), ymd("2000/02/28"))

…and so on.

So far I’ve just been doing this:


start <- ymd("2000/01/01")

x <- c(start, rollback(start + month(1)), 
       start + months(1), rollback(start + months(2)),
       start + months(2), rollback(start + months(3)),
       start + months(3), rollback(start + months(4)),
       start + months(4), rollback(start + months(5)),
       start + months(5), rollback(start + months(6)),
       start + months(6), rollback(start + months(7)),
       start + months(7), rollback(start + months(8)),
       start + months(8), rollback(start + months(9)),
       start + months(9), rollback(start + months(10)),
       start + months(10), rollback(start + months(11)),
       start + months(11), rollback(start + months(12)))

Any help is much appreciated, thank you!

>Solution :

You could generate first days and the subtract 1:

first_days <- start + months(0:12) 
sort(c(head(first_days, -1), tail(first_days - 1, -1)))

Leave a Reply