btw_2025_ergebnisse %>%
summarytools::dfSummary(na.col = FALSE) %>% # missings-Spalte ausblenden
summarytools::view(file = "./data/btw_2025_ergebnisse_uebersicht.html") # speichern
Sommersemester 2026 | Sitzung 3
| Funktion | Beschreibung | Geeignet für |
|---|---|---|
dfSummary() |
Übersicht über alle Variablen (Klasse, fehlende Werte, Verteilungen, etc.) | Schnelle Gesamtübersicht eines Datensatzes |
freq() |
Häufigkeitstabellen | Einfache Verteilungen kategorialer Variablen |
descr() |
Deskriptive Statistik (Mittelwert, Median, SD, etc.) | Basisanalyse numerischer Variablen |
ctable() |
Kreuztabellen mit Prozenten und optionalen Tests (z. B. Chi²) | Zusammenhang zwischen zweikategorialen Variablen |
btw_2025_ergebnisse %>%
summarytools::dfSummary(na.col = FALSE) %>% # missings-Spalte ausblenden
summarytools::view(file = "./data/btw_2025_ergebnisse_uebersicht.html") # speichern
Abhängigkeiten:
summarytools greift auf ein anderes Paket namens cairo zucairo nutzt für die Erstellung von .html-Dateien eine Grafikbibliothek, die in Windows integriert ist, in macOS aber irgendwann ersetzt wurdeXQuartz herunterladen: xquartz.org
RStudio öffnen und das Skript erneut ausführen
naming convention: uebung_01_name.R (+ gern auch im Dokument selbst angeben)
Code immer ausführen! Das ist die beste Prüfung, ob er korrekt ist.
achtet darauf alle benötigten Pakete zu laden (mein Fehler)
nutzt lieber relative als absolute Pfade
install.packages(" ") vs library( ) : eins hat Anführungszeichen, das andere nicht
Aufgabe 4c) zu Labels fiel schwer
Important
kursfremde Syntax fällt (negativ) auf!
leere Übungen oder Kursskripte abzugeben ebenfalls
Es gibt rund 10 Übungen, davon bis zu 1 “Joker”
nach jeder Abgabe notiere ich:
grün = pünktlich und bestanden;
gelb = mit Mängeln und/ oder unpünktlich,
rot = nicht bestanden oder nicht eingereicht
am Ende des Semesters bekommen alle, die 9-10 mal grünes Licht bekommen haben (und die übrigen Bestandteile wie Lektüre und mündl. Teilnahme erfüllt haben) ihre aktive und regelmäßige Teilnahme bestätigt
alles andere sind Einzelfallprüfungen. (Wie oft? Wurde eine Begründung angegeben? Wurde eine Ausgleichsleistung angeboten? etc.)
Base R
df <- read.csv("daten.csv")
df2 <- df[df$jahr == 2025, ]
mittel <- mean(df2$stimmen, na.rm = TRUE)
Viele Zwischenobjekte
schnell unlesbar durch verschachtelte [ ] bei mehreren Schritten
tidyverse
df <- rio::import("daten.csv")
mittel <- df %>%
dplyr::filter(jahr == 2025) %>%
dplyr::summarise(
m = mean(stimmen, na.rm = TRUE)
)
Ein Objekt, eine Pipeline
Jede Zeile = ein Schritt
Schritte lesen sich von oben nach unten wie eine Anleitung: “nimm df, dann filtere, dann berechne.”
|> ODER magrittr pipe: %>%Strg + Shift + Mbtw_2025_ergebnisse %>%
dplyr::filter(jahr == 2025) %>%
dplyr::select(partei, zweitstimmen)
| Befehl | Beschreibung | Bsp |
|---|---|---|
rename() |
Spaltennamen ändern | df %>% rename(neu = alt) |
select() |
Variablen auswählen | df %>% select(var1, var2) |
slice() |
Zeilen nach Position auswählen | df %>% slice(1:10) |
filter() |
Zeilen nach Werten filtern | df %>% filter(jahr == 2025) |
relocate() |
Spaltenreihenfolge ändern | df %>% relocate(var1, .before = var2) |
| Befehl | Beschreibung | Bsp |
|---|---|---|
mutate() |
Neue Variablen hinzufügen | df %>% mutate(anteil = stimmen / sum(stimmen)) |
summarise() |
Mehrere Werte zusammenfassen | df %>% summarise(mean(stimmen)) |
count() |
Häufigkeiten zählen | df %>% count(partei) |
group_by() |
Operationen gruppenweise ausführen | df %>% group_by(partei) %>% summarise(mean(stimmen)) |
| Befehl | Beschreibung | Bsp |
|---|---|---|
pivot_longer() |
Breites Format in langes umwandeln | df %>% pivot_longer(cols = -id, names_to = "var", values_to = "val") |
pivot_wider() |
Langes Format in breites umwandeln | df %>% pivot_wider(names_from = var, values_from = val) |
1. In der Console ansehen
Sinnvoll zum Testen, kann aber schnell unübersichtlich werden bei großen Datensätzen
Änderungen werden nirgends gespeichert
btw_2025_ergebnisse %>%
dplyr::select(gebietsart, gebietsnummer, gruppenname, stimme, prozent, gewahlt) %>%
head(10)
gebietsart gebietsnummer gruppenname stimme prozent gewahlt
1 Bund 99 Wahlberechtigte NA NA
2 Bund 99 Wählende NA 82.512200
3 Bund 99 Ungültige 1 0.847738
4 Bund 99 Ungültige 2 0.559080
5 Bund 99 Gültige 1 99.152262
6 Bund 99 Gültige 2 99.440920
7 Bund 99 SPD 1 20.071417
8 Bund 99 SPD 2 16.413301
9 Bund 99 CDU 1 25.460226
10 Bund 99 CDU 2 22.550824
2. “Nur kurz schauen”
Daten werden in einem neuen Tab geöffnet.
Umgeht das Unübersichtlichkeitsproblem.
Nervt aber ggf. später, wenn das Skript von oben bis unten ausgeführt wird (“Source”-button).
btw_2025_ergebnisse %>%
dplyr::filter(gebietsart != "Einzelbewerber/Wählergruppe") %>%
View()
3. Speichern oder Überschreiben
viele unterschiedliche Objekte zu speichern kann unübersichtlich werden
aber einmal überschriebene Daten schwieriger zurückzuholen
btw_2025_ergebnisse_be <- btw_2025_ergebnisse %>%
dplyr::filter(gebietsname == "Berlin")
btw_2025_ergebnisse <- btw_2025_ergebnisse %>%
dplyr::rename(
uberg_gebietsart = ueg_gebietsart, # neuer_name = alter_name
uberg_gebietsnr = ueg_gebietsnummer)
Long-Format ist sinnvoll für:
Wide-Format ist sinnvoll für:
Bitte füllt die Minute Cards für die heutige Sitzung aus. Das sollt enicht länger als 3 Minuten dauern. Vielen Dank für eure Mitarbeit!
Übung 2 zu “Data Wrangling” bis spätestens Sonntagabend!
Quantitative Methoden mit R & R-Studio | SoSe26 | Maura Kratz