# Tutorial :How to subtract years?

### Question:

I have a date in R, e.g.:

``dt = as.Date('2010/03/17')  ``

I would like to subtract 2 years from this date, without worrying about leap years and such issues, getting `as.Date('2010-03-17')`.

How would I do that?

### Solution:1

The easiest thing to do is to convert it into POSIXlt and subtract 2 from the years slot.

``> d <- as.POSIXlt(as.Date('2010/03/17'))  > d\$year <- d\$year-2  > as.Date(d)  [1] "2008-03-17"  ``

See this related question: How to subtract days in R?.

### Solution:2

With `lubridate`

``library(lubridate)  ymd("2010/03/17") - years(2)  ``

### Solution:3

You could use `seq`:

``R> dt = as.Date('2010/03/17')  R> seq(dt, length=2, by="-2 years")[2]  [1] "2008-03-17"  ``

### Solution:4

If leap days are to be taken into account then I'd recommend using this lubridate function to subtract months, as other methods will return either March 1st or NA:

``> library(lubridate)  > dt %m-% months(12*2)  [1] "2008-03-17"    # Try with leap day  > leapdt <- as.Date('2016/02/29')  > leapdt %m-% months(12*2)  [1] "2014-02-28"  ``

### Solution:5

Same answer than the one by rcs but with the possibility to operate it on a vector (to answer to MichaelChirico, I can't comment I don't have enough rep):

``R> unlist(lapply(c("2015-12-01", "2016-12-01"),         function(x) { return(as.character(seq(as.Date(x), length=2, by="-1 years")[2])) }))   [1] "2014-12-01" "2015-12-01"  ``

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »