J'ai une date en R, par exemple:
dt = as.Date('2010/03/17')
Je voudrais soustraire 2 ans de cette date, sans se soucier des années bissextiles et de ces problèmes, en obtenant as.Date('2010-03-17')
.
Comment ferais-je ça?
La chose la plus simple à faire est de le convertir en POSIXlt et de soustraire 2 de la tranche d'années.
> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"
Voir cette question connexe: Comment soustraire des jours dans R? .
Avec lubridate
library(lubridate)
ymd("2010/03/17") - years(2)
Vous pouvez utiliser seq
:
R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"
Si les jours bissextiles doivent être pris en compte, je recommanderais d'utiliser cette fonction de lubrification pour soustraire les mois, car d'autres méthodes reviendront soit le 1er mars, soit 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"
Même réponse que celle de rcs mais avec la possibilité de l'opérer sur un vecteur (pour répondre à MichaelChirico, je ne peux pas commenter je n'ai pas assez de 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"