R séquence de dates avec lubridate
Salut j'essaie d'avoir une séquence de dates avec lubridate
ça ne marche pas
seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))
la base de la commande
seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')
Oui, mais j'aimerais savoir s'il y a une façon élégante de faire ça avec lubridate.
MODIFIER
s'il vous plaît ignorez : résolu moi-même ainsi laissant pour la postérité seulement. Heureux d'avoir cette supprimés si nécessaire.
seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')
Fait le tour
2 réponses
ymd
est un wrapper pour analyser les chaînes de date et renvoie un objet POSIXct
.
il suffit d'utiliser la terminologie standard décrite dans ?seq.POSIXt
(et non 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')
fonctionne
tout comme
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week')
vous pouvez forcer 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 une façon de coller dans l'univers POSIXct
de lubridate
et de ne pas changer les formats de date à la base R POSIXt
. J'évite de changer le format de la date dans mes scripts parce que je trouve que c'est un endroit commun où les bogues (par exemple les changements de fuseau horaire ou la perte d'horodateurs) sont introduits. Il suit cette recommandation d'utiliser %m+%
: R: ajouter 1 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"
a régulier +
fonctionne aussi parfois, mais le %m+%
prévient les erreurs de ce genre:
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+
était juste une façon d'ajouter des mois, et similaire lubridate
commandes comme %y+%
etc. n'existent pas. Mais, il s'avère que le " m "ne signifie pas"mois supplémentaire". Ma meilleure supposition est "magique" =)