Musterlösung
library("readr")
wetter <- read_delim("datasets/prepro/weather.csv", ",")
wetter$stn <- as.factor(wetter$stn)
wetter$time <- as.POSIXct(as.character(wetter$time), format = "%Y%m%d%H", tz = "UTC")Lese die Wetterdaten von letzter Woche weather.csv (Quelle MeteoSchweiz) in R ein. Sorge dafür, dass die Spalten korrekt formatiert sind (stn als factor, time als POSIXct, tre200h0 als numeric.)
library("readr")
wetter <- read_delim("datasets/prepro/weather.csv", ",")
wetter$stn <- as.factor(wetter$stn)
wetter$time <- as.POSIXct(as.character(wetter$time), format = "%Y%m%d%H", tz = "UTC")Lese den Datensatz metadata.csv ebenfalls als csv ein.
Wenn Umlaute und Sonderzeichen nicht korrekt dargestellt werden (z.B. das è in Genève), hat das vermutlich mit der Zeichencodierung zu tun. Das File ist aktuell in UTF-8 codiert. Wenn Umlaute nicht korrekt dargestellt werden, hat R diese Codierung nicht erkannt und sie muss in der Import-Funktion spezifitiert werden. Dies wird je nach verwendete import Funktion unterschiedlich gemacht:
readr: locale = locale(encoding = "UTF-8")fileEncoding = "UTF-8"Wenn ihr die Codierung eines Files nicht kennt, könnt ihr wie folgt vorgehen: Anleitung für Windows, für Mac und für Linux.
metadata <- read_delim("datasets/prepro/metadata.csv", locale = locale(encoding = "UTF-8"))Nun wollen wir den Datensatz wetter mit den Informationen aus metadata anreichern. Uns interessiert aber nur das Stationskürzel, der Name, die x/y Koordinaten sowie die Meereshöhe. Selektiere diese Spalten.
metadata <- metadata[, c("stn", "Name", "x", "y", "Meereshoehe")]Jetzt kann metadata mit dem Datensatz wetter verbunden werden. Überlege dir, welcher Join dafür sinnvoll ist und mit welchem Attribut wir “joinen” können.
Nutze die Join-Möglichkeiten von dplyr (Hilfe via ?dplyr::join), um die Datensätze wetter und metadata zu verbinden.
library("dplyr")
wetter <- left_join(wetter, metadata, by = "stn")
# Jointyp: Left-Join auf 'wetter', da uns nur die Stationen im Datensatz 'wetter' interessieren.
# Attribut: "stn"Erstelle eine neue Spalte month, welche den jeweiligen Monat (aus time) beinhaltet. Nutze dafür die Funktion lubridate::month().
library("lubridate")
wetter$month <- month(wetter$time)Berechne mit der Spalte month die Durchschnittstemperatur pro Monat.
# mit base R:
mean(wetter$tre200h0[wetter$month == 1])
## [1] -1.963239
mean(wetter$tre200h0[wetter$month == 2])
## [1] 0.3552632
mean(wetter$tre200h0[wetter$month == 3])
## [1] 2.965054
# usw. für alle 12 Monate
# kommende Woche lernen wir Split Apply Combine (group_by / summarise)