This question already has an answer here:
- How to subtract months from a date in R? 2 answers
I am trying to add a month to a date i have. But then its not possible in a straight manner so far. Following is what i tried.
d <- as.Date("2004-01-31")
d + 60
# [1] "2004-03-31"
Adding wont help as the month wont be overlapped.
seq(as.Date("2004-01-31"), by = "month", length = 2)
# [1] "2004-01-31" "2004-03-02"
Above might work , but again its not straight forward. Also its also adding 30 days or something to the date which has issues like the below
seq(as.Date("2004-01-31"), by = "month", length = 10)
# [1] "2004-01-31" "2004-03-02" "2004-03-31" "2004-05-01" "2004-05-31" "2004-07-01" "2004-07-31" "2004-08-31" "2004-10-01" "2004-10-31"
In the above , for the first 2 dates , month haven’t changed.
Also the following approach also failed for month but was success for year
d <- as.POSIXlt(as.Date("2010-01-01"))
d$year <- d$year +1
d
# [1] "2011-01-01 UTC"
d <- as.POSIXlt(as.Date("2010-01-01"))
d$month <- d$month +1
d
Error in
format.POSIXlt(x, usetz = TRUE)
: invalid 'x' argument
What is the right method to do this ?
"mondate"
is somewhat similar to"Date"
except that addingn
addsn
months rather thann
days:The simplest way is to convert Date to POSIXlt format. Then perform the arithmetic operation as follows:
Moreover, incase you want to deal with Date columns in data.table, unfortunately, POSIXlt format is not supported.
Still you can perform the add month using basic R codes as follows:
Hope it helps.
I turned antonio's thoughts into a specific function:
Vanilla R has a naive difftime class, but the Lubridate CRAN package lets you do what you ask:
Hope that helps.
Function
%m+%
from lubridate adds one month without exceeding last day of the new month.