13  Mehrere Datensätze

Häufige Problemstellung

  • Daten auf mehrere Dateien verteilt

  • Im Beispiel hier: Niederschlagsdaten von drei Stationen

Erste Möglichkeit: Copy und Paste

d1 <- read_delim(
  "daten/produkt_nieder_tag_18850601_20171231_05344.txt",
  delim = ";", locale = locale(decimal_mark = "."), trim_ws = TRUE
)
d2 <- read_delim(
  "daten/produkt_nieder_tag_19210101_20171231_01443.txt",
  delim = ";", locale = locale(decimal_mark = "."), trim_ws = TRUE
)
d3 <- read_delim(
  "daten/produkt_nieder_tag_19310101_20171231_00555.txt",
  delim = ";", locale = locale(decimal_mark = "."), trim_ws = TRUE
)
d <- bind_rows(d1, d2, d3)
  • Schnell gemacht
  • Änderungen im Nachhinein zeitraubend
  • Nicht empfohlen

Zweite Möglichkeit: In Funktion einlesen

read_one_file <- function(filename) {
  read_delim(filename, delim = ";", locale = locale(decimal_mark = "."), trim_ws = TRUE) |>
    mutate(
      MESS_DATUM = ymd(MESS_DATUM),
      STATIONS_ID = factor(STATIONS_ID)
    )
}
d1 <- read_one_file("daten/produkt_nieder_tag_18850601_20171231_05344.txt")
d2 <- read_one_file("daten/produkt_nieder_tag_19210101_20171231_01443.txt")
d3 <- read_one_file("daten/produkt_nieder_tag_19310101_20171231_00555.txt")
d <- bind_rows(d1, d2, d3)
  • Funktion: Eingabe Dateinamen, Rückgabewert Dataframe
  • Änderung nur an einer Stelle
  • Praktisch: Daten in der Funktion aufbereiten
  • Wichtig: Zuerst an einer Datei testen, es funktioniert nie auf Anhieb!
  • Empfohlen falls nur wenige Dateien

Dritte Möglichkeit: Verzeichnis auflisten lassen

read_one_file <- function(filename) {
  read_delim(filename, delim = ";", locale = locale(decimal_mark = "."), trim_ws = TRUE, show_col_types = FALSE) |>
    mutate(
      MESS_DATUM = ymd(MESS_DATUM),
      STATIONS_ID = factor(STATIONS_ID)
    )
}
d <- list.files(path = "daten", pattern = "produkt_nieder_tag.*.txt", full.names = TRUE) |>
  map(read_one_file) |>
  bind_rows()
  • Mit list.files Dateien auflisten lassen
  • Mit map die Funktion read_one_file für alle Dateien ausführen
  • Ergebnis mit bind_rows in einem Dataframe kombinieren
  • Wichtig: Bei bind_rows Datentyp beachten. Bei Bedarf mit mutate und as.character oder as.numeric konvertieren
  • Empfohlen falls mehr als drei Dateien