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)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
- 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.filesDateien auflisten lassen - Mit
mapdie Funktionread_one_filefür alle Dateien ausführen - Ergebnis mit
bind_rowsin einem Dataframe kombinieren - Wichtig: Bei
bind_rowsDatentyp beachten. Bei Bedarf mitmutateundas.characteroderas.numerickonvertieren - Empfohlen falls mehr als drei Dateien