Datumsformate und Zeitreihenanalysen

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:

# Beispieldaten erstellen
df <- data.frame(
  datum_string = c("2023-06-15", "2023-07-20", "2023-08-10", "2023-09-05"),
  temperatur = c(22.5, 28.3, 31.1, 19.8),
  station = c("Berlin", "München", "Hamburg", "Köln")
)

# Überprüfen der Datentypen
str(df)
'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 Änderung
str(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 Datumsformate
verschiedene_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 Formaten
verschiedene_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

Wichtige Formatcodes

  • %Y = 4-stelliges Jahr (z.B. 2023)
  • %y = 2-stelliges Jahr (z.B. 23)
  • %m = Monat als Zahl (01-12)
  • %B = Vollständiger Monatsname (Januar, Februar, …)
  • %b = Abgekürzter Monatsname (Jan, Feb, …)
  • %d = Tag des Monats (01-31)

Extrahieren von Datumsteilen mit format()

Die format()-Funktion ermöglicht es uns, bestimmte Teile eines Datums zu extrahieren:

df <- df %>%
  mutate(
    Jahr = format(datum, "%Y"),
    Monat = format(datum, "%B"),      # Vollständiger Monatsname
    Monat_num = format(datum, "%m"),  # Monat als Zahl
    Tag = format(datum, "%d"),
    Wochentag = format(datum, "%A")   # Wochentag
  )

print(df)
  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 Monaten
temperatur_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
# Filtern nach Sommermonaten (Juni, Juli, August)
sommer_daten <- temperatur_daten %>%
  filter(Monat %in% c("Juni", "Juli", "August"))

print(sommer_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

Zusammenfassung

In diesem Kapitel haben wir die wichtigsten Grundlagen gelernt:

  1. Datumskonvertierung: as.Date() zur Umwandlung von Text in Datumsvariablen
  2. Formatextraktion: format(datum, "%B") um Monatsnamen zu extrahieren
  3. Filtern: Nach bestimmten Monaten mit filter() und %in%

Diese Techniken werden in der Übungsaufgabe verwendet und sind essentiell für die Datenanalyse.