Versuche dies. (Hier verwenden wir text=Lines
, um das Beispiel in sich geschlossen zu halten, aber in Wirklichkeit würden wir es durch den Dateinamen ersetzen.)
Lines <- "2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386"
library(zoo)
z <- read.zoo(text = Lines, FUN = as.yearmon)
plot(z)
Die X-Achse ist mit diesen Daten nicht so hübsch, aber wenn Sie in der Realität mehr Daten haben, ist dies möglicherweise in Ordnung, oder Sie können den Code für eine ausgefallene X-Achse verwenden, die im Beispielabschnitt von gezeigt wird ?plot.zoo
.
Die oben erstellte Zoo-Serie z
hat einen "yearmon"
Zeitindex und sieht folgendermaßen aus:
> z
Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Aug 2009 Sep 2009 Oct 2009
12 310 2379 234 14 1 34 2386
"yearmon"
kann auch alleine verwendet werden:
> as.yearmon("2000-03")
[1] "Mar 2000"
Hinweis:
"yearmon"
Klassenobjekte werden in Kalenderreihenfolge sortiert.
Dadurch werden die monatlichen Punkte in gleichmäßigen Abständen aufgezeichnet, was wahrscheinlich erwünscht ist. Wenn es jedoch gewünscht wird, die Punkte in ungleichmäßigen Abständen zu zeichnen, die proportional zur Anzahl der Tage in jedem Monat verteilt sind, konvertieren Sie den Index von z
in "Date"
Klasse : time(z) <- as.Date(time(z))
.
as.Date(month, format='%Y-%m-01')
das gleiche Ergebnis erzielen können. Dies "fühlt" sich für mich vorzuziehen an, da die Angabe des gleichen Datums in jedem Monat mehr vom Format des Datums als von der Manipulation von Zeichenfolgen abhängt, aber vielleicht ist das Unsinn.> as.Date("2016-01", format="%Y-%m-01") # [1] NA
. Ich benutze R 3.3.1Die prägnanteste Lösung, wenn die Daten im Datumsformat vorliegen sollen:
as.Date
fixiert den ersten Tag eines jeden Monats für Sie auf ein jährliches Objekt.quelle
Sie können dies auch mit den Funktionen
parse_date_time
oderfast_strptime
aus demlubridate
Paket erreichen:Der Unterschied zwischen diesen beiden besteht darin, dass
parse_date_time
eine Formatspezifikation im Lubridat-Stil möglich ist, währendfast_strptime
dieselbe Formatspezifikation wie erforderlich iststrptime
.Zum Festlegen der Zeitzone können Sie den
tz
Parameter -parameter verwenden:Wenn Ihre Datums- /
truncated
Uhrzeitdaten Unregelmäßigkeiten aufweisen , können Sie mit dem Parameter -parameter angeben, wie viele Unregelmäßigkeiten zulässig sind:Verwendete Daten:
quelle
date
mitparse_date_time
einer anderen Reihenfolge als"2009-01-01 UTC"
mit demlubridate
Paket anzuzeigen ? Ich würde es vorziehen, den Tag zuerst in meinem Datensatz zu sehen, z01-01-2009
.?format
; zB :format(your_date, "%d-%m-%Y")
. Dies hat jedoch einen Nachteil: Sie erhalten einen Zeichenwert zurück und kein Datum.format
aus dem von Ihnen genannten Grund zu vermeiden. Ich dachte, es könnte eine Möglichkeit geben, dies in daslubridate
Paket aufzunehmen, aber es scheint, dass dies nicht der Fall ist.Verwenden Sie jederzeit Paket:
quelle
anydate("2009-03")
ob immer der erste Tag des Monats gewählt wird.?strptime
: Die Eingabezeichenfolge muss das Datum nicht vollständig angeben: Es wird angenommen, dass nicht angegebene Sekunden, Minuten oder Stunden Null sind und ein nicht angegebenes Jahr, Monat oder Tag das aktuelle ist. (Wenn jedoch ein Monat angegeben wird, muss der Tag dieses Monats mit% d oder% e angegeben werden, da der aktuelle Tag des Monats für den angegebenen Monat nicht gültig sein muss.) Die Antwort von Megatron enthält anscheinend ein ähnliches Stück der Dokumentation ausas.Date
.anytime('1870-01')
Wie oben (und an anderer Stelle in SO) erwähnt, benötigen Sie zum Konvertieren der Zeichenfolge in ein Datum ein bestimmtes Datum des Monats. Von der
as.Date()
Handbuchseite:Eine einfache Lösung wäre, das Datum
"01"
in jedes Datum einzufügen undstrptime()
es als ersten Tag dieses Monats anzugeben.Für diejenigen, die etwas mehr Hintergrundinformationen zur Verarbeitung von Datum und Uhrzeit in R suchen:
In R verwenden Zeiten
POSIXct
undPOSIXlt
Klassen und Daten dieDate
Klasse.Daten werden als Anzahl der Tage seit dem 1. Januar 1970 und Zeiten als Anzahl der Sekunden seit dem 1. Januar 1970 gespeichert.
Also zum Beispiel:
So führen Sie Operationen an Datum und Uhrzeit durch:
Und um Daten zu verarbeiten, können Sie Folgendes verwenden
strptime()
(Ausleihen dieser Beispiele von der Handbuchseite):quelle
Ich denke, die Lösung von @ ben-rollert ist eine gute Lösung.
Sie müssen nur vorsichtig sein, wenn Sie diese Lösung in einer Funktion in einem neuen Paket verwenden möchten.
Bei der Entwicklung von Paketen wird empfohlen, die Syntax zu verwenden
packagename::function_name()
(siehe http://kbroman.org/pkg_primer/pages/depends.html ).In diesem Fall müssen Sie die von der
as.Date()
definierte Version von verwendenzoo
Bibliothek verwenden.Hier ist ein Beispiel :
Wenn Sie also ein Paket entwickeln, sollten Sie Folgendes verwenden:
quelle