Arbeiten mit Datumsangaben in der Sprache R (Grundfunktionen sowie Lubridate- und TimeperiodsR-Pakete)

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


  1. Arbeiten mit Datumsangaben in der grundlegenden R-Syntax
    1.1. Text in Datum konvertieren
    1.2. Abrufen von Datumskomponenten in Base R.
  2. 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
  3. Vereinfachte Arbeit mit Perioden, ZeitperiodenR-Paket
    3.1. Zeitintervalle in ZeiträumenR
    3.2. Filtern eines Datumsvektors mit ZeitperiodenR
  4. 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:


FormatierenBeschreibung
% dTagesnummer im Monat
% aAbkürzung für den Namen des Wochentags
% A.Vollständiger Name des Wochentags
% wWochentagsnummer (0-6, wobei 0 Sonntag ist)
% mZweistellige Monatsbezeichnung (01-12)
% bAbkürzung für den Namen des Monats (apr, mar, ...)
% B.Voller Monatsname
% yZweistellige Jahresbezeichnung
% Y.Vierstellige Jahresbezeichnung
% jTagesnummer des Jahres (001 - 366)
% U.Wochennummer des Jahres (00 - 53), Wochenbeginn Sonntag
% W.Wochennummer des Jahres (00 - 53), Wochenbeginn Montag

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:


  • y - Jahr
  • m - Monat
  • d - Tag

Liste der Funktionen zum Konvertieren von Text in Datum über Lubridate
  • ymd()
  • 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 Zeit
  • ceiling_date - Rundung auf die nahe Zukunft
  • round_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:
6. Oktober 2019


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.


3 Wochen ab dem 6. Oktober 2019




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

Source: https://habr.com/ru/post/de469215/


All Articles