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"