Holen Sie sich das aktuelle Datum in einer beliebigen Programmiersprache, eine Operation, die "Hallo Welt!" Entspricht. Die Sprache R ist keine Ausnahme.
In diesem Artikel werden wir uns ansehen, wie Datumsangaben in der grundlegenden R-Syntax funktionieren, sowie einige nützliche Pakete, die ihre Funktionen beim Arbeiten mit Datumsangaben erweitern:
lubridate
- ein Paket, das arithmetische Berechnungen zwischen Daten ermöglicht;timeperiodsR
- ein Paket zum Arbeiten mit Zeitintervallen und ihren Komponenten.

Inhalt
- Arbeiten mit Datumsangaben in der grundlegenden R-Syntax
1.1. Text in Datum konvertieren
1.2. Abrufen von Datumskomponenten in Base R. - Arbeiten mit Daten mit dem Lubridate-Paket
2.1. Konvertieren Sie Text mit Lubridate in das Datum
2.2. Abrufen von Datumskomponenten mit dem Lubridate-Paket
2.3. Arithmetische Operationen mit Datumsangaben - Vereinfachte Arbeit mit Perioden, ZeitperiodenR-Paket
3.1. Zeitintervalle in ZeiträumenR
3.2. Filtern eines Datumsvektors mit ZeitperiodenR - Fazit
Arbeiten mit Datumsangaben in der grundlegenden R-Syntax
Text in Datum konvertieren
In Basic R gibt es eine Reihe von Funktionen zum Arbeiten mit Datumsangaben. Das Minus der Grundsyntax ist, dass das Register der Namen und Argumente der Funktionen sehr fragmentiert ist und praktisch keine logische Verbindung hat. Trotzdem müssen die Grundfunktionen der Sprache bekannt sein, also werden wir mit ihnen beginnen.
Wenn Sie Daten aus CSV-Dateien oder anderen Quellen in R laden, erhalten Sie das Datum meistens in Form von Text. Verwenden Sie die Funktion as.Date()
diesen Text in den richtigen Datentyp zu as.Date()
.
# my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23") # class(my_dates)
#> [1] "character"
# my_dates <- as.Date(my_dates) # class(my_dates)
#> [1] "Date"
Standardmäßig akzeptiert as.Date()
ein Datum in zwei Formaten: JJJJ-MM-TT oder JJJJ / MM / TT .
Wenn die Daten in Ihrem Datensatz ein anderes Format haben, können Sie das Formatargument für die Konvertierung verwenden.
as.Date("September 26, 2019", format = "%B %d, %Y")
format akzeptiert in einer Zeichenfolge Formularoperatoren, die ein beliebiges Zeitintervall und dessen Format angeben. Die am häufigsten verwendeten Werte sind in der folgenden Tabelle aufgeführt:
Dementsprechend ist „26. September 2019“ der vollständige Name des Monats, des Tages und des Jahres. Sie können dieses Datumsformat mit den Operatoren wie folgt beschreiben: "%B %d, %Y"
.
Wo:
%B
- Vollständiger Monatsname%d
- Tageszahl im Monat%Y
- Vierstellige Jahresbezeichnung
Bei der Beschreibung des Datumsformats ist es wichtig, alle zusätzlichen Zeichen aus Ihrer Zeichenfolge einzuschließen, z. B. Bindestriche, Kommas, Punkte, Leerzeichen usw. In meinem Beispiel "26. September 2019" wird ein Komma nach dem Datum gesetzt, und ein Komma sollte auch in der Formatbeschreibung "%B %d, %Y"
.
Es gibt Situationen, in denen Sie ein Datum erhalten, das nicht nur für Standardformate (JJJJ-MM-TT oder JJJJ / MM / TT) ungeeignet ist, sondern auch in einer Sprache, die von der Standardeinstellung in Ihrem Betriebssystem abweicht. Sie haben beispielsweise Daten heruntergeladen, bei denen das Datum in der folgenden Form angegeben ist: "15. Dezember 2019". Bevor Sie diese Zeichenfolge in ein Datum konvertieren, müssen Sie das Gebietsschema ändern.
# Sys.setlocale("LC_TIME", "Russian") # as.Date(" 15, 2019 .", format = "%B %d, %Y")
Abrufen von Datumskomponenten in Base R.
In Basic R gibt es nicht viele Funktionen, mit denen Sie einen Teil eines Datums aus einem Objekt der Date- Klasse extrahieren können.
current_date <- Sys.Date() # weekdays(current_date) # months(current_date) # quarters(current_date) #
Zusätzlich zur Hauptklasse der Datumsobjekte in der Basis R gibt es zwei weitere Datentypen, in denen der Zeitstempel gespeichert ist: POSIXlt , POSIXct . Der Hauptunterschied zwischen diesen Klassen und Datum besteht darin, dass sie zusätzlich zum Datum die Uhrzeit speichern.
# current_time <- Sys.time() # current_time class(current_time)
# "POSIXct" "POSIXt"
Die Funktion Sys.time()
gibt das aktuelle Datum und die aktuelle Uhrzeit im POSIXct- Format zurück. Dieses Format hat eine ähnliche Bedeutung wie UNIXTIME und speichert die Anzahl der Sekunden seit Beginn der UNIX-Ära (Mitternacht (UTC) vom 31. Dezember 1969 bis 1. Januar 1970) .
Die POSIXlt- Klasse speichert auch Uhrzeit und Datum sowie alle ihre Komponenten. Daher ist es ein Objekt mit einer komplexeren Struktur, von dem es jedoch leicht ist, eine beliebige Komponente des Datums und der Uhrzeit seitdem zu erhalten Im Wesentlichen ist POSIXlt eine Liste .
# current_time_ct <- Sys.time() # POSIXlt current_time_lt <- as.POSIXlt(current_time_ct) # current_time_lt$sec # current_time_lt$min # current_time_lt$hour # current_time_lt$mday # current_time_lt$mon # current_time_lt$year # current_time_lt$wday # current_time_lt$yday # current_time_lt$zone #
Die Konvertierung von Zahlen- und Textdaten in POSIX * -Formate erfolgt durch die Funktionen as.POSIXct()
und as.POSIXlt()
. Diese Funktionen haben eine kleine Anzahl von Argumenten.
- x - Die Nummer, Zeichenfolge oder das Objekt der zu konvertierenden Date- Klasse.
- tz - Zeitzone, Standard ist "GMT";
- format - Beschreibung des Datumsformats, in dem die im Argument x übergebenen Daten dargestellt werden;
- origin - Wird nur beim Konvertieren einer Zahl in POSIX verwendet. Sie müssen ein Datumsobjekt an dieses Argument übergeben und die Zeit, ab der die Sekunden gezählt werden. Wird normalerweise für die Übersetzung von UNIXTIME verwendet.
Wenn Ihre Datums- und Uhrzeitdaten in UNIXTIME angezeigt werden , konvertieren Sie sie anhand des folgenden Beispiels in ein verständliches, lesbares Datum:
# UNIXTIME as.POSIXlt(1570084639, origin = "1970-01-01")
Im Ursprung können Sie einen beliebigen Zeitstempel angeben. Wenn in Ihren Daten beispielsweise Datum und Uhrzeit als Anzahl der Sekunden ab dem 15. September 2019, 12:15 Uhr angegeben sind, verwenden Sie Folgendes, um sie in ein Datum umzuwandeln:
# UNIXTIME 15 2019 12:15 as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
Arbeiten mit Daten mit dem Lubridate-Paket
lubridate
vielleicht das beliebteste Paket für die Arbeit mit Daten in R. Es bietet Ihnen drei weitere Klassen.
- Dauer - Dauer, d.h. Anzahl der Sekunden zwischen zwei Zeitstempeln;
- Zeiträume - Zeiträume ermöglichen es Ihnen, Berechnungen zwischen Daten von für Menschen lesbaren Intervallen durchzuführen: Tage, Monate, Wochen usw.
- Intervalle - Objekte, die den Anfangs- und Endzeitpunkt angeben.
Die Installation zusätzlicher Pakete in der Sprache R erfolgt über die Standardfunktion install.packages()
.
Installieren des lubridate
Pakets:
install.packages("lubridate")
Konvertieren Sie Text mit Lubridate in das Datum
Die Funktionen des lubridate
Pakets vereinfachen die Konvertierung von Text in Datum erheblich und ermöglichen es Ihnen, arithmetische Operationen mit Datum und Uhrzeit auszuführen.
Mit den Funktionen today()
und now()
können Sie das aktuelle Datum oder Datum und die Uhrzeit abrufen.
today() # now() #
Um eine Zeichenfolge in ein Datum lubridate
verfügt lubridate
über eine ganze Familie von Funktionen, deren Namen immer aus drei Buchstaben bestehen und eine Folge von lubridate
angeben:
Liste der Funktionen zum Konvertieren von Text in Datum über Lubridateymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
Einige Beispiele für die Konvertierung von Zeichenfolgen in Datumsangaben:
ymd("2017 jan 21") mdy("March 20th, 2019") dmy("1st april of 2018")
Wie Sie sehen können, lubridate
Datumsbeschreibungen in Form von Text wesentlich effizienter und ermöglicht es Ihnen, Text in Datum zu konvertieren, ohne zusätzliche Operatoren zur Beschreibung des Formats zu verwenden.
Abrufen von Datumskomponenten mit dem Lubridate-Paket
Auch mit lubridate
können Sie jede Komponente von einem Datum erhalten:
dt <- ymd("2017 jan 21") year(dt) # month(dt) # mday(dt) # yday(dt) # wday(dt) #
Arithmetische Operationen mit Datumsangaben
Die wichtigste und grundlegendste Funktionalität von lubridate
ist jedoch die Fähigkeit, verschiedene arithmetische Operationen mit Datumsangaben auszuführen.
Das Runden eines Datums erfolgt durch drei Funktionen:
floor_date
- Rundung auf die nächste vergangene Zeitceiling_date
- Rundung auf die nahe Zukunftround_date
- Rundung auf die nächste Zeit
Jede dieser Funktionen verfügt über ein Einheitenargument , mit dem Sie eine Rundungseinheit angeben können: Sekunde, Minute, Stunde, Tag, Woche, Monat, Zweimonat, Quartal, Saison, Halbjahr, Jahr
dt <- ymd("2017 jan 21") round_date(dt, unit = "month") # round_date(dt, unit = "3 month") # 3 round_date(dt, unit = "quarter") # round_date(dt, unit = "season") # round_date(dt, unit = "halfyear") #
Lassen Sie uns also herausfinden, wie Sie ein Datum erhalten, das 8 Tage nach dem aktuellen Datum liegt, und verschiedene andere arithmetische Berechnungen zwischen zwei Daten durchführen.
today() + days(8) # 8 today() - months(2) # 2 today() + weeks(12) # 12 today() - years(2) # 2
Vereinfachte Arbeit mit Perioden, ZeitperiodenR-Paket.
timeperiodsR
ist ein timeperiodsR
Paket für die Arbeit mit Daten, das im September 2019 auf CRAN veröffentlicht wurde.
Installieren des timeperiodsR
Pakets:
install.packages("timeperiodsR")
Der Hauptzweck besteht darin, schnell ein bestimmtes Zeitintervall relativ zu einem bestimmten Datum zu bestimmen. Mit seinen Funktionen können Sie beispielsweise ganz einfach:
- Holen Sie sich letzte Woche, Monat, Quartal oder Jahr in R.
- Erhalten Sie eine bestimmte Anzahl von Zeitfenstern in Bezug auf ein Datum, z. B. die letzten 4 Wochen.
- Es ist einfach, seine Komponenten aus dem erhaltenen Zeitintervall zu extrahieren: das Start- und Enddatum, die Anzahl der Tage, die in das Intervall fallen, die gesamte Folge von Daten, die es eingeben.
Der Name aller Funktionen des Pakets timeperiodsR
intuitiv und besteht aus zwei Teilen: Richtung _ Intervall , wobei:
- Richtung, in die es erforderlich ist, sich relativ zu einem bestimmten Datum zu bewegen: last_n, previous, this, next, next_n.
- Zeitintervall für die Berechnung des Zeitraums: Tag, Woche, Monat, Quartal, Jahr.
Vollständiger Funktionsumfang:last_n_days()
last_n_weeks()
last_n_months()
last_n_quarters()
last_n_years()
previous_week()
previous_month()
previous_quarter()
previous_year()
this_week()
this_month()
this_quarter()
this_year()
next_week()
next_month()
next_quarter()
next_year()
next_n_days()
next_n_weeks()
next_n_months()
next_n_quarters()
next_n_years()
custom_period()
Zeitintervalle in ZeiträumenR
Diese Funktionen sind nützlich, wenn Sie Berichte basierend auf Daten der letzten Woche oder des letzten Monats erstellen müssen. Verwenden Sie die gleichnamige Funktion previous_month()
um den letzten Monat abzurufen:
prmonth <- previous_month()
Danach haben Sie ein prprth- Objekt der tpr- Klasse, von dem Sie leicht die folgenden Komponenten erhalten können:
- Das Startdatum des Zeitraums, in unserem Beispiel ist dies der letzte Monat
- Zeitraum Enddatum
- die Anzahl der im Zeitraum enthaltenen Tage
- Reihenfolge der in der Periode enthaltenen Daten
Darüber hinaus können Sie jede der Komponenten auf unterschiedliche Weise erhalten:
# prmonth$start start(prmonth) # prmonth$end end(prmonth) # prmonth$sequence seq(prmonth) # prmonth$length length(prmonth)
Sie können jede der Komponenten auch mit dem Argument part abrufen, das in jeder der Paketfunktionen vorhanden ist. Mögliche Werte: Start, Ende, Sequenz, Länge.
previous_month(part = "start") # previous_month(part = "end") # previous_month(part = "sequence") # previous_month(part = "length") #
Schauen wir uns also alle Argumente an, die in den Funktionen des timeperiodsR
Pakets timeperiodsR
sind:
x
- das Referenzdatum, ab dem der Zeitraum berechnet wird, standardmäßig das aktuelle Datum;n
- Die Anzahl der Intervalle, die in dem Zeitraum enthalten sein werden, z. B. 3 vorherige Wochen;part
- Welche Komponente des tpr
Objekts müssen Sie erhalten, standardmäßig all
;week_start
- Das Argument ist nur in den Funktionen für die Arbeit mit Wochen vorhanden und ermöglicht es Ihnen, die Nummer des Wochentags anzugeben, der als Beginn betrachtet wird. Standardmäßig ist der Wochenbeginn Montag, Sie können jedoch einen beliebigen Wert von 1 - Montag bis 7 - Sonntag angeben.
So können Sie jeden Zeitraum relativ zum aktuellen oder einem anderen bestimmten Datum berechnen. Ich werde einige weitere Beispiele nennen:
# 3 # 6 2019 # - last_n_weeks(x = "2019-10-06", n = 3, week_start = 1)
Time period: from 9 September of 2019, Monday to 29 September of 2019, Sunday
Der 6. Oktober ist Sonntag:

Wir brauchen einen Zeitraum, der gegenüber dem 6. Oktober drei Vorwochen dauern wird. Ohne die Woche vom 6. Oktober. Dementsprechend ist dies der Zeitraum vom 9. bis 29. September.

# 4 # 16 2019 previous_month(x = "2019-09-16", n = 4)
Time period: from 1 May of 2019, Wednesday to 31 May of 2019, Friday
In diesem Beispiel interessieren wir uns für den Monat vor 4 Monaten, wenn wir vom 16. September 2019 fortfahren, war es dementsprechend Mai 2019.
Filtern eines Datumsvektors mit ZeitperiodenR
Es gibt mehrere Operatoren zum Filtern von Daten in timeperiodsR
:
- % left_out% - vergleicht zwei Objekte der tpr-Klasse und gibt den Wert von links zurück, die sich nicht rechts befinden.
- % left_in% - vergleicht zwei Objekte der tpr-Klasse und gibt Daten vom linken Objekt zurück, die im rechten Objekt enthalten sind.
- % right_out% - vergleicht zwei Objekte der tpr-Klasse und gibt den Wert von rechts zurück, die links fehlen.
- % right_in% - vergleicht zwei Objekte der tpr-Klasse und gibt die Daten des rechten Objekts zurück, die im linken vorhanden sind.
period1 <- this_month("2019-11-07") period2 <- previous_week("2019-11-07") period1 %left_in% period2 # period1 period2 period1 %left_out% period2 # period1 period2 period1 %right_in% period2 # period2 period1 period1 %right_out% period2 # period2 period1
Fazit
Wir haben die Objektklassen, die in der R-Sprache für die Arbeit mit Datumsangaben entworfen wurden, eingehend untersucht. Außerdem können Sie jetzt mit dem Paket timeperiodsR
arithmetische Operationen an Datumsangaben ausführen und schnell beliebige Zeiträume timeperiodsR
.
Wenn Sie sich für die R-Sprache interessieren, lade ich Sie ein, meinen Telegrammkanal R4marketing zu abonnieren, in dem ich täglich nützliche Materialien über die Verwendung der R-Sprache bei der Lösung meiner täglichen Aufgaben austausche .