4.3 readr::read_delim()

Nun wollen wir lernen, einen großen Datensatz einzulesen. Dazu verwenden wir die Daten aus dem Speicherkoog. Es handelt sich um eine .csv Datei, die entweder mit der Funktion

  • read_csv() (liest CSV-Dateien, die ein Komma , als Spalten- und einen Punkt . als Dezimaltrennzeichen verwenden)
  • read_csv2() (liest CSV-Dateien, die ein Semikolon ; als Spalten- und das Komma , als Dezimaltrennzeichen verwenden)

eingelesen werden können. Dazu geben wir den Dateipfad relativ zu unserem Arbeitsverzeichnis an. Ich habe bspw. meine Daten zum einlesen in einem Unterordner data. Von der Datei selber wird der Pfad durch / getrennt angegeben.

# Laden der Daten mit der Funktion read_csv
koog_raw <- readr::read_csv2("data/data_year.csv")
koog_raw

Ui, hier ist aber etwas schief gelaufen. Wir haben die Datei erfolgreich in unserer Arbeitsumgebung laden können aber 12 observations bei nur einer Variable?! Schaut euch den Datensatz koog_raw mal genauer an, indem ihr auf das Symbol (rot umrandet) klickt:

Environment

Figure 4.4: Environment

Richtig, wir haben vergessen den Zahlenseparator richtig zu setzen. read_csv() und read_csv2 sind Spezialformen der Funktion read_delim(). Zukünftig werden wir read_delim() verwenden wenn nicht klar ist, wie die Trennzeichen in unseren Rohdaten hinterlegt sind. Bei uns ist es ein ; und kein ,.

koog_raw <- readr::read_delim("data/data_year.csv", delim = ",")

💡 Wenn ihr in der Klammer von read_delim() den Tab drückt (siehe unten) dann bekommt ihr einen Vorschlag, welche Argumente in der Funktion belegt werden können.

Tab Taste

Figure 4.5: Tab Taste

Schauen wir uns den Datensatz koog_raw etwas genauer an.

head(koog_raw, n = 10)
## # A tibble: 10 x 56
##     year   time  st10  mp10  st20  mp20  st30  mp30  st60  mp60 st100 mp100
##    <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  2010  3300. 11.5  1.42  11.4  1.09  11.3  1.20  11.1  0.692 10.8  0.563
##  2  2011 10980.  9.40 0.942  9.35 0.695  9.34 0.582  9.06 0.471  9.21 0.405
##  3  2012 19752.  9.92 0.752  9.86 0.508  9.89 0.471  9.25 0.346  9.63 0.209
##  4  2013 28524.  9.31 0.681  9.37 0.457  9.34 0.481  8.57 0.452  9.09 0.339
##  5  2014 37284. 10.7  1.08  10.7  0.697 10.7  0.972  9.64 0.644 10.4  0.480
##  6  2015 46044.  9.77 0.646  9.83 0.221  9.82 0.223  8.97 0.128  9.83 0.112
##  7  2016 54816.  9.47 1.26   9.94 1.48   9.58 1.27   9.11 1.01  10.1  0.586
##  8  2017 63588   9.18 0.971  9.76 1.09   9.27 0.774  8.92 0.609  9.86 0.387
##  9  2018 72348.  9.11 1.41   9.76 1.62   9.22 1.62   8.95 1.60   9.96 1.10 
## 10  2019 81108.  8.95 1.06   9.58 1.24   9.13 1.12   9.04 0.911 10.1  0.618
## # ... with 44 more variables: st150 <dbl>, mp150 <dbl>, eh10a <dbl>,
## #   eh10b <dbl>, eh10c <dbl>, eh20a <dbl>, eh20b <dbl>, eh20c <dbl>,
## #   eh30a <dbl>, eh30b <dbl>, eh30c <dbl>, eh60a <dbl>, eh60b <dbl>,
## #   eh60c <dbl>, eh100a <dbl>, eh100b <dbl>, eh100c <dbl>, eh150a <dbl>,
## #   eh150b <dbl>, eh150c <dbl>, wd <dbl>, ws <dbl>, at <dbl>, rh <dbl>,
## #   ap <dbl>, pp <dbl>, sr <dbl>, wt <dbl>, ec <dbl>, bat <dbl>, lt <dbl>,
## #   wt_2 <dbl>, oxy10 <dbl>, oxy20 <dbl>, oxy30 <dbl>, oxy60 <dbl>, ...

Wir haben ja bereits gesagt, dass es praktischer ist ausschließlich die Spalten mit Kleinbuchstaben (snake_case) zu belegen. Es gibt eine einfache Funktion mit janitor::clean_names(), welche automatisch die Spalten kohärent umcodiert und individuell vergibt:

Illustration von Allison Horst

Figure 4.6: Illustration von Allison Horst

koog_raw <- janitor::clean_names(koog_raw)
head(koog_raw, n = 5)

Tritt eine Variable 2x auf wie bspw. pp, so wird der zweite pp Eintrag um pp_2 ergänzt.

Wofür stehen die einzelnen Spalten also:

Spaltenname Beschreibung Einheit
time Zeilennummer der observation (stündliches Messinterval
date Datum + Zeitangabe der Messung
st10:st150 Bodentemperatur pro Tiefe (einfache Wiederholung) °C
mp10:mp150 Matrixpotenzial pro Tiefe (einfache Wiederholung) log hPa
eh10a:eh150c Redoxpotentzial pro Tiefe (dreifache Wiederholung) mV
wd Windrichtung °
ws Windgeschwindigkeit m s-1
at Lufttemperatur °C
rh Relative Luftfeuchte %
ap Luftdruck hPa
pp Niederschlag mm h-1
sr Solarstrahlung W m-2
wt Grundwasserflurabstand cm u GOK
ec Elektrische Leitfähigkeit mS cm-1
bat Akkuleistung der Schaltschranks V
lt Loggertemperatur °C
oxy10:oxy150 Sauerstoffgehalt %-Luftsättigung