difftime r date date-arithmetic r-faq

difftime - as date r



¿Cómo restar años? (5)

Tengo una fecha en R, por ejemplo:

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

Me gustaría restar 2 años a partir de esta fecha, sin preocuparme por los años bisiestos y problemas de este tipo, obteniendo as.Date(''2010-03-17'') .

¿Como podría hacerlo?


Con lubridate

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


La misma respuesta que la de rcs pero con la posibilidad de operarla en un vector (para responder a MichaelChirico, no puedo comentar que no tengo suficiente reputación):

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"


Lo más fácil es convertirlo en POSIXlt y restar 2 de la ranura de años.

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

Vea esta pregunta relacionada: ¿Cómo restar días en R? .


Podrías usar seq :

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


Si se deben tener en cuenta los días bisiestos, entonces recomiendo usar esta función de lubricación para restar meses, ya que otros métodos devolverán el 1 de marzo o 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"