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

40
demandé sur Tahnoon Pasha 2013-06-05 09:24:22

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)))
44
répondu mnel 2013-06-05 05:44:10

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" =)

1
répondu rrr 2018-08-01 14:53:17