2017-02-14 6 views
2

Gibt es eine effiziente Möglichkeit, einen Zeitsequenzvektor mit tidyverse und lubridate zu generieren? Ich weiß, die beiden können mit seq() arbeiten, wenn man die Anzahl der Daten als Intervall verwendet. Zum Beispiel mit dem Eingang:Generieren Sie eine Sequenz von Zeit mit R und lubridate

seq(today(), today()+dyears(1), 60) 

man eine Reihe von Terminen mit einem 60-Tage-Intervall

"2017-02-14" "2017-04-15" "2017-06-14" "2017-08-13" "2017-10-12" "2017-12-11" "2018-02-09" 

Allerdings bekommen kann, gibt es eine Möglichkeit, dass diese für Wochen arbeiten kann, Monate und Jahre als auch? Vielleicht so etwas wie den Code unten, die ich dachte funktionieren würde, aber nicht:

seq(as_date(2000-01-01), as_date(2017-01-01), dyears(1)) 

Error: Incompatible duration classes (Duration, numeric). Please coerce with as.duration .

Ich weiß es möglich ist, dyears(1) in 365 oder 30 zu ändern, wenn man nur eine Näherung für Jahr oder Monat benötigen, Aber er fragte sich, ob es intelligentere Möglichkeiten gibt, Schaltjahre und -monate zu berücksichtigen.


mehr Kontext, ich möchte ein Datum Vektor erzeugen, damit ich die scale_x_date in ggplot anpassen können. Anstatt die Anzeige 2000, 2003, 2006, 2009 zu lassen, möchte ich, dass die Handlung möglichst alle Einzeljahre oder sogar alle drei Monate hat.

+4

'seq (heute(), heute() + dyears (1), durch = 'Wochen) ' – GGamba

+2

Verwenden Sie' seq.Date'. Es ist ein bisschen Magie; Du kannst es mit = '2 Wochen' weitergeben und es wird es herausfinden. – alistaire

+0

Danke, @GGamba, ich habe nicht realisiert, dass man 'Wochen' und 'Jahre' in 'by =' für 'seq()' –

Antwort

2

Sie könnten versuchen, seq.Date mit():

seq.Date(from=as.Date("2000-01-01"), to=as.Date("2010-01-01"), by="month") 

oder:

seq(as.Date("2000/1/1"), by = "month", length.out = 12) 
Verwandte Themen