R Reihenfolge der Daten mit Lubridat


75

Hallo, ich versuche mit lubridate eine Folge von Daten zu bekommen

Das funktioniert nicht

seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))

der Basisbefehl

seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')

tut es, aber ich würde gerne wissen, ob es einen eleganten Weg gibt, dies mit Lubridat zu tun.

BEARBEITEN

Bitte ignorieren: Ich habe mich gelöst und bin nur der Nachwelt überlassen. Ich bin froh, dass dies bei Bedarf gelöscht wurde.

seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')

Macht den Trick


danke @shujaa mnel kam dort mit einer hilfreichen und detaillierten Erklärung an.
Tahnoon Pasha

Antworten:


86

ymdist ein Wrapper zum Parsen von Datumszeichenfolgen und gibt ein POSIXctObjekt zurück.

Sie müssen lediglich die in ?seq.POSIXt(nicht lubridate) beschriebene Standardterminologie verwenden , um Wochen zu definieren

seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '1 week')
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'weeks')

wird funktioniert

wie wird

seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week')

Sie könnten das lubridate PeriodKlassenobjekt zu a zwingen difftime, aber das scheint eher unnötig

seq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))

Gibt es eine Möglichkeit, eine Folge von POSIXctformatierten Objekten abzurufen? Ich möchte meine POSIXtDatumssequenz für eine benutzerdefinierte x-Achse verwenden und stimme nicht mit den Daten des Diagramms überein (es ist alles POSIXct aus der Schmiermittelausgabe).
rrr

Eine Warnung, dass der Basis-R-Ansatz nicht immer dasselbe tut wie die Periode des Schmiermittels. seq(as.Date("2001-01-31"), as.Date("2001-12-31"), "months")gibt zum Beispiel überraschende Ergebnisse.
dash2

5

Dies ist eine Möglichkeit, im POSIXctUniversum zu bleiben lubridateund Datumsformate nicht in Basis-Rs zu ändern POSIXt. Ich vermeide es, das Datumsformat in meinen Skripten zu ändern, da es häufig vorkommt, dass Fehler (z. B. Zeitzonenänderungen oder Verlust von Zeitstempeln) auftreten. Es folgt dieser Rat %m+%: R: Hinzufügen eines Monats zu einem Datum

# 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"

Ein regulärer +funktioniert manchmal auch, aber das %m+%verhindert Fehler wie diesen:

posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA               NA               NA

Zuerst war ich verwirrt, weil ich dachte, es %m+sei nur eine Möglichkeit, Monate hinzuzufügen, und ähnliche lubridateBefehle wie %y+%usw. existieren nicht. Es stellt sich jedoch heraus, dass "m" nicht für "Monatsaddition" steht. Meine beste Vermutung ist "Magie" =)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.