Bei der Arbeit mit Zeitreihen und Datumsvariablen ist es wichtig zu verstehen, wie R mit Datumsformaten umgeht und wie wir diese im tidyverse manipulieren können. In diesem Kapitel lernen wir verschiedene Möglichkeiten kennen, Datumsvariablen zu formatieren und zu filtern.
Grundlagen zu Datumsformaten in R
R erkennt Datumsangaben nicht automatisch als solche. Oft werden Daten als Textstrings (character) eingelesen. Daher müssen wir sie explizit in Datumsvariablen umwandeln.
Beispiel-Datensatz erstellen
Zunächst erstellen wir einen Beispiel-Datensatz mit verschiedenen Datumsformaten:
'data.frame': 4 obs. of 3 variables:
$ datum_string: chr "2023-06-15" "2023-07-20" "2023-08-10" "2023-09-05"
$ temperatur : num 22.5 28.3 31.1 19.8
$ station : chr "Berlin" "München" "Hamburg" "Köln"
Wie wir sehen, ist datum_string als Character-Variable gespeichert.
Umwandlung in Datumsvariablen
Verwendung von as.Date()
Die Basisfunktion as.Date() wandelt Character-Strings in Datumsvariablen um:
df <- df %>%mutate(datum =as.Date(datum_string))# Überprüfen der Änderungstr(df)
'data.frame': 4 obs. of 4 variables:
$ datum_string: chr "2023-06-15" "2023-07-20" "2023-08-10" "2023-09-05"
$ temperatur : num 22.5 28.3 31.1 19.8
$ station : chr "Berlin" "München" "Hamburg" "Köln"
$ datum : Date, format: "2023-06-15" "2023-07-20" ...
Verschiedene Datumsformate mit as.Date()
Falls die Daten in anderen Formaten vorliegen, müssen wir das Format spezifizieren:
# Beispiele für verschiedene Datumsformateverschiedene_formate <-data.frame(datum_de =c("15.06.2023", "20.07.2023", "10.08.2023"),datum_us =c("06/15/2023", "07/20/2023", "08/10/2023"),datum_text =c("15 Juni 2023", "20 Juli 2023", "10 August 2023"))# Umwandlung mit spezifizierten Formatenverschiedene_formate <- verschiedene_formate %>%mutate(datum_de_converted =as.Date(datum_de, format ="%d.%m.%Y"),datum_us_converted =as.Date(datum_us, format ="%m/%d/%Y") )print(verschiedene_formate)
datum_de datum_us datum_text datum_de_converted datum_us_converted
1 15.06.2023 06/15/2023 15 Juni 2023 2023-06-15 2023-06-15
2 20.07.2023 07/20/2023 20 Juli 2023 2023-07-20 2023-07-20
3 10.08.2023 08/10/2023 10 August 2023 2023-08-10 2023-08-10
datum_string temperatur station datum Jahr Monat Monat_num Tag
1 2023-06-15 22.5 Berlin 2023-06-15 2023 Juni 06 15
2 2023-07-20 28.3 München 2023-07-20 2023 Juli 07 20
3 2023-08-10 31.1 Hamburg 2023-08-10 2023 August 08 10
4 2023-09-05 19.8 Köln 2023-09-05 2023 September 09 05
Wochentag
1 Donnerstag
2 Donnerstag
3 Donnerstag
4 Dienstag
Filtern nach Monaten
Häufig möchten wir Daten nach bestimmten Monaten filtern. Hier ein praktisches Beispiel:
# Beispiel-Datensatz mit mehreren Monatentemperatur_daten <-data.frame(datum =c("2023-06-15", "2023-07-20", "2023-08-10", "2023-09-05", "2023-10-12"),temperatur =c(22.5, 28.3, 31.1, 19.8, 12.4)) %>%mutate(datum =as.Date(datum),Monat =format(datum, "%B") # Dies ist die Funktion aus der Übung! )print(temperatur_daten)
datum temperatur Monat
1 2023-06-15 22.5 Juni
2 2023-07-20 28.3 Juli
3 2023-08-10 31.1 August
4 2023-09-05 19.8 September
5 2023-10-12 12.4 Oktober