web-dev-qa-db-fra.com

Comment soustraire / ajouter des jours de / à une date?

J'essaie de créer des dossiers pour stocker des pulls de données. Je veux étiqueter les dossiers avec le jour de ces données dans le pull.

Ex. Je tire il y a 5 jours des données de mysql je veux nommer le dossier la date d'il y a 5 jours.

MySQL peut facilement gérer l'arithmétique des dates. Je ne sais pas exactement comment R le fait. Dois-je simplement soustraire le nombre approprié de secondes dans POSIXct puis convertir en POSIXlt pour nommer le dossier MM_DD_YYYY?

Ou existe-t-il une meilleure façon?

47
Dan

Il suffit de soustraire un nombre:

> as.Date("2009-10-01")
[1] "2009-10-01"
> as.Date("2009-10-01")-5
[1] "2009-09-26"

Comme la classe Date n'a que des jours, vous pouvez simplement faire de l'arithmétique de base dessus.

Si vous souhaitez utiliser POSIXlt pour une raison quelconque, vous pouvez utiliser ses emplacements:

> a <- as.POSIXlt("2009-10-04")
> names(unclass(as.POSIXlt("2009-10-04")))
[1] "sec"   "min"   "hour"  "mday"  "mon"   "year"  "wday"  "yday"  "isdst"
> a$mday <- a$mday - 6
> a
[1] "2009-09-28 EDT"
80
Shane

La réponse dépend probablement du format de votre date, mais voici un exemple utilisant la classe Date:

dt <- as.Date("2010/02/10")
new.dt <- dt - as.difftime(2, unit="days")

Vous pouvez même jouer avec différentes unités comme des semaines.

46
Aniko

Il existe bien sûr une solution lubridate pour cela:

library(lubridate)
date <- "2009-10-01"

ymd(date) - 5
# [1] "2009-09-26"

est le même que

ymd(date) - days(5)
# [1] "2009-09-26"

D'autres formats d'heure pourraient être:

ymd(date) - months(5)
# [1] "2009-05-01"

ymd(date) - years(5)
# [1] "2004-10-01"

ymd(date) - years(1) - months(2) - days(3)
# [1] "2008-07-29"
23
J_F