Salut, j'essaie d'obtenir une séquence de dates avec lubrification
Ça ne marche pas
seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))
la commande de base
seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')
le fait, mais j'aimerais savoir s'il existe une façon élégante de le faire avec du lubrifiant.
MODIFIER
Veuillez ignorer: je me suis résolu, donc je ne laisse que la postérité. Heureux de l'avoir supprimé si nécessaire.
seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')
Est-ce que l'astuce
ymd
est un wrapper pour analyser les chaînes de date et renvoie un objet POSIXct
.
Vous devez simplement utiliser la terminologie standard décrite dans ?seq.POSIXt
(pas lubridate
) pour définir les semaines
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '1 week')
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'weeks')
fonctionnera
comme le fera
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week')
Vous pouvez contraindre l'objet de classe lubridate
Period
à un difftime
, mais cela semble plutôt inutile
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))
C'est un moyen de rester dans l'univers POSIXct
de lubridate
et de ne pas changer les formats de date pour baser les POSIXt
de R. J'évite de changer le format de date dans mes scripts car je trouve que c'est un endroit commun où des bugs (par exemple des changements de fuseau horaire ou des horodatages perdus) sont introduits. Il suit ce conseil pour utiliser %m+%
: R: ajout d'un mois à une date
# example date is a leap day for a "worst case scenario"
library("lubridate")
posixct.in <- parse_date_time(x = "2016-02-29", orders = "ymd")
# [1] "2016-02-29 UTC"
posixct.seq <- posixct.in %m+% years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2017-02-28 UTC" "2018-02-28 UTC" "2019-02-28 UTC"
posixct.seq <- posixct.in %m+% months(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-29 UTC" "2016-04-29 UTC" "2016-05-29 UTC"
posixct.seq <- posixct.in %m+% days(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-01 UTC" "2016-03-02 UTC" "2016-03-03 UTC"
posixct.seq <- posixct.in %m+% weeks(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-07 UTC" "2016-03-14 UTC" "2016-03-21 UTC"
Un habitué +
fonctionne aussi parfois, mais le %m+%
empêche les erreurs comme celle-ci:
posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA NA NA
Au début, j'étais confus parce que je pensais que %m+
n'était qu'un moyen d'ajouter des mois, et des commandes lubridate
similaires comme %y+%
etc. n'existent pas. Mais, il s'avère que le "m" ne signifie pas "ajout de mois". Ma meilleure supposition est "magique" =)