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
Antworten:
ymd
ist ein Wrapper zum Parsen von Datumszeichenfolgen und gibt einPOSIXct
Objekt zurück.Sie müssen lediglich die in
?seq.POSIXt
(nichtlubridate
) beschriebene Standardterminologie verwenden , um Wochen zu definierenseq(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
Period
Klassenobjekt zu a zwingendifftime
, aber das scheint eher unnötigseq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))
quelle
POSIXct
formatierten Objekten abzurufen? Ich möchte meinePOSIXt
Datumssequenz für eine benutzerdefinierte x-Achse verwenden und stimme nicht mit den Daten des Diagramms überein (es ist alles POSIXct aus der Schmiermittelausgabe).seq(as.Date("2001-01-31"), as.Date("2001-12-31"), "months")
gibt zum Beispiel überraschende Ergebnisse.Dies ist eine Möglichkeit, im
POSIXct
Universum zu bleibenlubridate
und Datumsformate nicht in Basis-Rs zu ändernPOSIXt
. 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 ähnlichelubridate
Befehle wie%y+%
usw. existieren nicht. Es stellt sich jedoch heraus, dass "m" nicht für "Monatsaddition" steht. Meine beste Vermutung ist "Magie" =)quelle