Quick question on dates in R. Check out this snippet of code:
Sys.Date() - months(3)
# [1] \"2013-12-31\"
Sys.Date() - months(18)
# [1] NA
The lubridate
functions %m+%
and %m-%
are designed to handle this issue ("Add and subtract months to a date without exceeding the last day of the new month").
library(lubridate)
Sys.Date() %m-% months(18)
# [1] "2012-09-30"
# or to make it reproducible if Sys.Date() happens to be different from that in OP
as.Date("2014-03-31") %m-% months(18)
# [1] "2012-09-30"
# example of %m+%
as.Date("2014-01-31") + months(1)
# [1] NA
as.Date("2014-01-31") %m+% months(1)
# [1] "2014-02-28"
Similarly if you want to have an increment of 3 months, it can be done as follows:
PW_Data_Plan_V1$Month = as.Date(PW_Data_Plan_V1$DOJ) %m+% months(3)
The solution provides forward months exactly, i.e. 28Feb %m+% gives 28Mar, which is not ideal if working with month end data.
To adjust the top to always give you the last day of the month, use the following code:
ceiling_date((as.Date("2014-02-28") %m+% months(1)),"month")-days(1)
> "2014-03-31"