Zum laden der Daten benutzen wir das readr
Package. readr stellt eine ganze Reihe von Befehlen bereit.
needs(readr, dplyr)
Zunächst werden wir die (zuvor bereinigten) Wahlergebnisse laden. Dazu benutzen wir die read_tsv
Funktion vom readr
Paket. Wir speichern das Ergebnis in der Variable btw
.
btw <- read_tsv('data/cleaned/btw09_kerg.csv')
## Parsed with column specification:
## cols(
## .default = col_integer(),
## Wahlkreis = col_character(),
## Wahlberechtigte.Zweitstimmen = col_character(),
## Wähler.Zweitstimmen = col_character(),
## PSG.Erststimmen = col_character(),
## CM.Erststimmen = col_character(),
## DVU.Erststimmen = col_character(),
## FWD.Erststimmen = col_character(),
## RENTNER.Erststimmen = col_character(),
## `Freie Union.Zweitstimmen` = col_character(),
## Übrige.Zweitstimmen = col_character()
## )
## See spec(...) for full column specifications.
Tipp: oben rechts im “Environment” Panel zeigt RStudio alle angelegten Variablen und Tabellen. Per Klick lässt sich unsere Tabelle btw
anschauen.
btw <- read_tsv('data/cleaned/btw09_kerg.csv') %>%
select(Nr, Wahlkreis, Land,
Total=Gültige.Zweitstimmen,
CDU=CDU.Zweitstimmen,
SPD=SPD.Zweitstimmen,
CSU=CSU.Zweitstimmen,
FDP=FDP.Zweitstimmen,
GRÜNE=GRÜNE.Zweitstimmen,
LINKE=`DIE LINKE.Zweitstimmen`)
## Parsed with column specification:
## cols(
## .default = col_integer(),
## Wahlkreis = col_character(),
## Wahlberechtigte.Zweitstimmen = col_character(),
## Wähler.Zweitstimmen = col_character(),
## PSG.Erststimmen = col_character(),
## CM.Erststimmen = col_character(),
## DVU.Erststimmen = col_character(),
## FWD.Erststimmen = col_character(),
## RENTNER.Erststimmen = col_character(),
## `Freie Union.Zweitstimmen` = col_character(),
## Übrige.Zweitstimmen = col_character()
## )
## See spec(...) for full column specifications.
Tipp: Mit der Hilfefunktion in RStudio können wir mehr über alle Befehle erfahren. Dazu einfach den Eingabe-Cursor irgendwo auf das Wort “select” setzen und die F1 Taste drücken.
Um neue Spalten zu berechnen benutzen wir das Paket dplyr
(Link für später: Introduction to dplyr)
Aus den Zweitstimmen der großen Parteien berechnen wir nun die Gesamtstimmen zweier Blöcke: SPD + LINKE + GRÜNE (RRG) sowie Schwarz-Gelb (SG)
Gesamtstimmen der Koalitionen Rot-Rot-Grün (RRG) und CDU/CSU+FDP (SG) berechnen:
btw_koal <- btw %>%
mutate(RRG=SPD + GRÜNE + LINKE,
SG=CDU + CSU + FDP)
Schauen wir uns das Ergebnis an fällt auf das wir immer nur NA
bei Schwarz-Gelb erhalten. Woran liegt das?
CDU uns CSU sind niemals gleichzeitig definiert. Was wir brauchen ist eine Funktion die automatisch entweder den CDU oder CSU Wert benutzt, je nach dem welcher definiert ist. Die coalesce
Funktion macht genau das:
btw_koal <- btw %>%
mutate(RRG=SPD + GRÜNE + LINKE,
SG=coalesce(CDU, CSU) + FDP)
100 * (SG - RRG)/(SG + RRG)
btw_margin <- btw_koal %>%
# lege ein neues feld "margin" an
mutate(margin=round(100 * (SG - RRG)/(SG + RRG), 2)) %>%
# lege ein neues feld "winner" an
mutate(winner=ifelse(SG > RRG, 'SG', 'RRG')) %>%
# lege ein neues feld "landslide" an
mutate(landslide=abs(margin) >= 10) %>%
# lege ein neues feld "gruppe" an
mutate(gruppe=paste0(ifelse(landslide,'L_','C_'), winner)) %>%
# sortiere die gruppen
mutate(gruppe=factor(gruppe, c('L_SG', 'C_SG', 'C_RRG', 'L_RRG')))
Testen:
table(btw_margin$landslide)
##
## FALSE TRUE
## 111 188
table(btw_margin$landslide, btw_margin$winner)
##
## RRG SG
## FALSE 53 58
## TRUE 77 111
TO DO: Wiederholen mit Wahlergebnissen früherer Wahlen!
Strukturdaten dazuladen und per left_join verbinden:
btw_struktur <- read_tsv('data/cleaned/btw13_strukturdaten.csv') %>%
select(-Wahlkreis) %>%
filter(Nr < 300)
## Parsed with column specification:
## cols(
## .default = col_double(),
## Nr = col_integer(),
## Wahlkreis = col_character(),
## Gemeinden = col_character()
## )
## See spec(...) for full column specifications.
und per left_join
verbinden
btw_final <- btw_margin %>%
left_join(btw_struktur, by ='Nr')
Und für Teil 2 speichern:
btw_final %>% write_csv('btw-final.csv')