# Welcome back zu Episode III # Das kennen wir schon: Package laden, Working Directory setzen, Wetterdaten laden: library(tidyverse) #setwd('~/wegweisR') dwd_gebietsmittel_lufttemperatur_datei <- 'regional_averages_tm_year.txt' dwd_gebietsmittel_lufttemperatur <- read_delim(dwd_gebietsmittel_lufttemperatur_datei, delim = ';', skip = 1, trim_ws = TRUE) # Bisher haben wir vor allem einzelne Länder visualisiert. # Das liegt daran, dass die Datem im sogenannten "wide"-Format vorliegen. # Visualisierungen (und auch vieles andere) in R basiert aber auf dem "long"-Format. # Die Funktion zum Umformatieren heißt pivot_longer: ?pivot_longer # Übrigens kann man auch den Cursor in den Befehl setzen und F1 drücken. # Die Hilfe sagt uns, wir sollen in die Vignette schauen: vignette('pivot') # Wir finden heraus, dass wir ... # ...alle bisherigen Spalten definieren müssen, die in Zeilen wandern # -> im Grunde alle Bundesländer, aber wir fangen mal mit Sachsen und Bayern an # ...den Namen der neuen Namensspalte angeben sollen, die die bisherigen Spaltennamen erhält # -> im Grunde, I repeat, alle Bundesländer; also Name der Namensspalte "Bundesland" # ...den Namen der neuen Spalte mit den bisherigen Werten angeben sollen # -> letztlich ist das ja eine Temperatur, also nennen wir sie doch auch so # Let's try! # Schritt 1: Wir bauen uns ein Tibble, das nur Sachsen und Bayern enthält (zum Testen) dwd_gebietsmittel_lufttemperatur_sachsen_und_bayern <- dwd_gebietsmittel_lufttemperatur %>% select(Jahr, Sachsen, Bayern) # Schritt 2: Wir pivot_longer das! dwd_gebietsmittel_lufttemperatur_sachsen_und_bayern %>% pivot_longer(cols = c(Sachsen, Bayern), names_to = 'Bundesland', values_to = 'Temperatur') # Okay, cool! # Also alle Bundesländer rein. Kurzer Blick in die Vignette -- es gibt "everything()" :) dwd_gebietsmittel_lufttemperatur %>% pivot_longer(cols = everything(), names_to = 'Bundesland', values_to = 'Temperatur') # Hmm, was sagt uns das? # Jahr und Jahr_1 lassen sich schlecht gleich behandeln? # Was ist Jahr_1 überhaupt, brauchen wir das? str(dwd_gebietsmittel_lufttemperatur$Jahr_1) # Nicht wirklich, wir schmeißen das mal weg. # Wegschmeißen können wir, indem wir beim SELECT ein - davor setzen. dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1) %>% pivot_longer(cols = everything(), names_to = 'Bundesland', values_to = 'Temperatur') # Kein Fehler mehr, aber die erste Zeile heißt "Jahr". # Das wollten wir ja eigentlich als separate Spalte. # Neuerlicher Blick in Vignette und Hilfe ... ?pivot_longer vignette('pivot') # Wir lernen, dass wir für die "cols" auch einfach Spalten ausschließen können. # Also 1: Jahr_1 ("year", "year", "year" ...) braucht kein Mensch # Also 2: Jahr (1994, 1995, 1996 ...) wollen wir beim pivot_longer ausnehmen # Also 3: "-Jahr" statt "everything()" führt wohl zu everything außer Jahr dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') # Das sieht passabel aus. Machen 2502 Zeilen Sinn? # 139 Jahre waren es ja und 16 Bundesländer gibt's ... 139*16 # 2224 würden wir also erwarten. # Was ist mit den anderen? dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% group_by(Bundesland) %>% count() # Hah! 18! Da hat sich wer dazwischen geschlichen ... # --> "Deutschland" scheint ein Mittel über das ganze Land zu sein. Das klingt brauchbar. # --> "X20" klingt dubios, what's that? dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% filter(Bundesland == 'X20') # NA steht in R für fehlende Werte. Also Quatsch. # Wir können das einfach wie schon "Jahr_1" ausschließen. dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') # Alternativ können wir auch nach dem pivot_longer filtern. # Mit != nehmen wir alles, was nicht (!) "X20" ist. dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% filter(Bundesland != 'X20') # Über beide Wege sind es jetzt noch 2363 Einträge. # Das entspricht den 2224 erwarteten zzgl. 139 für "Deutschland". # Bazinga! # Was wollten wir eigentlich damit tun? # Ach ja, visualisieren! dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur, color = Bundesland)) %>% geom_line() %>% geom_point() # Erm, what? # *reading carefully* # ... # got it! dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur, color = Bundesland)) + geom_line() + geom_point() # Schön ist anders. Vielleicht kriegt jedes Bundesland einfach seine eigene Grafik? # Dafür gibt es facet_grid und facet_wrap. ?facet_grid ?facet_wrap # Let's go (Farben brauchen wir dann wohl nicht mehr und die Punkte lassen wir wegen der Größe mal weg). dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur)) + geom_line() + facet_wrap(vars(Bundesland)) # Sehr cool. # Jetzt noch Deutschland hervorheben! # Dafür bietet sich ein neues Package an -- gghighlight (-> jetzt installieren) library(gghighlight) vignette('gghighlight') # gghighlight graut also alles aus, was nicht unseren Bedingungen entspricht. dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur)) + geom_line() + facet_wrap(vars(Bundesland)) + gghighlight(Bundesland == 'Deutschland') # Wollen wir Deutschland also bunt, müssen wir alle bunt machen ... dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur)) + geom_line(color = 'red') + facet_wrap(vars(Bundesland)) # ... und mit gghighlight dann wieder ausgrauen dwd_gebietsmittel_lufttemperatur %>% select(-Jahr_1, -X20) %>% pivot_longer(cols = -Jahr, names_to = 'Bundesland', values_to = 'Temperatur') %>% ggplot(aes(x = Jahr, y = Temperatur)) + geom_line(color = 'red') + facet_wrap(vars(Bundesland)) + gghighlight(Bundesland == 'Deutschland')