library("dplyr")
library("readr")
library("lubridate")
# Alternativ kannst du alle tidyverse packages mit library("tidyverse") laden
Prepro 2: Übung A
Aufgabe 1
Lese die Wetterdaten von letzer 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
.)
Code
# Variante 1
<- 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") wetter
Code
# Variate 2 (für Profis)
<- read_csv("datasets/prepro/weather.csv",
wetter col_types = cols(
col_factor(levels = NULL),
col_datetime(format = "%Y%m%d%H"),
col_double()
) )
Aufgabe 2
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:
- Funktionen aus dem Package
readr
:locale = locale(encoding = "UTF-8")
- Base-R Funktionen:
fileEncoding = "UTF-8"
Wenn ihr die codierung eines Files nicht kennt, könnt wie folgt vorgehen: Anleitung für Windows, für Mac und für Linux.
Code
<- read_delim("datasets/prepro/metadata.csv", delim = ";", locale = locale(encoding = "UTF-8")) metadata
Aufgabe 3
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.
Code
<- metadata[, c("stn", "Name", "x", "y", "Meereshoehe")] metadata
Aufgabe 4
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.
Code
<- left_join(wetter, metadata, by = "stn")
wetter
# Jointyp: Left-Join auf 'wetter', da uns nur die Stationen im Datensatz 'wetter' interessieren.
# Attribut: "stn"
Aufgabe 5
Erstelle eine neue Spalte month
welche den jeweiligen Monat (aus time
) beinhaltet. Nutze dafür die Funktion lubridate::month()
.
Code
$month <- month(wetter$time) wetter
Aufgabe 6
Berechne mit der Spalte month
die Durchschnittstemperatur pro Monat.
Code
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