title: "Einführung in dplyr-Grammatik"
subtitle: "Daten bändigen & visualisieren"
author: "B. Philipp Kleer"
date: "11. Oktober 2021"
output:
slidy_presentation:
footer: "CC BY-SA 4.0, B. Philipp Kleer"
widescreen: true
highlight: pygments
theme: readable
css: style.css
df_print: paged
mathjax: default
self_contained: false
incremental: false #True dann jedes Bullet einzeln
collapse: true # means the text output will be merged into the R source code block
library("knitr")
library("rmarkdown")
library("tidyverse")
uni <- readRDS("../datasets/uni.rds")
opts_chunk$set(fig.path = 'pics/s6-', # path for calculated figures
fig.align = 'center', # alignment of figure (also possible right, left, default)
fig.show = 'hold', # how to show figures: hold -> direct at the end of code chunk; animate: all plots in an animation
fig.width = 3, # figure width
fig.height = 4, # figure height
echo = TRUE, # Code is printed
eval = FALSE, # Code is NOT evaluated
warning = FALSE, # warnings are NOT displayed
message = FALSE, # messages are NOT displayed
size = "tiny", # latex-size of code chunks
background = "#E7E7E7", # background color of code chunks
comment = "", # no hashtags before output
options(width = 80),
results = "markdown",
rows.print = 15
)
Starten wir!
Nun tauchen wir in die Welt von dplyr ein. Das Paket nutzt man oft, um Datenstrukturen zu erkunden oder Transformationen vorzunehmen. Dabei gibt es einen Grundstock an Vokabeln, die über piping miteinander verbunden werden.
Dazu installieren wir zuerst tidyverse:
install.packages("tidyverse")
library("tidyverse")
# alternativ:
# install.packages("dplyr")
# library("dplyr")
Anschließend laden wir den Datensatz uni
ins environment.
uni <- readRDS("yourpath/uni.rds")
Wir verschaffen uns einen Überblick über den Datensatz:
uni
Einen Überblick über die Variablen:
# ID: laufende Nummer
# mot: Studienmotivation (0 <sehr niedrig> - 10 <sehr hoch>)
# study: Studienfach (1 <Political Science>, 2 <Sociology>, 3 <Educational Science>, 4 <Psychology>)
# city: Studienort (1 <Gießen>, 2 <Marburg>, 3 <Frankfurt>)
# distance: Anfahrtsdauer zur Uni in Minuten
# abi: Abiturnote
# term: Fachsemester
Grundvokabeln in dplyr
In dplyr gibt es nicht viele Vokabeln, die aber effektiv miteinander verbunden werden können, um Daten zu sortieren bzw. zu manipulieren.
Die Grundvokabeln lernen wir jetzt im Folgenden erstmal ohne piping kennen:
- select()
- slice()
- filter()
- arrange()
- mutate()
- summarize()
- group_by()
select()
Mit select() wählen wir Spalten aus, die uns angezeigt werden
select(uni, # Datenquelle
c(mot, # ausgewählte Spalten
term))
slice()
Demgegenüber können wir mit slice() Zeilen auswählen, also Fälle:
slice(uni, # Datenquelle
50:55) # ausgewählte Zahlen
filter()
Mit filter() können wir spezifische Fälle des Datensatzes auswählen. Zur Erinnerung die logischen Verknüpfungen in R:
- logisches und:
&
- logisches oder:
|
- logisches gleich:
==
- logisches ungleich:
!=
- logisches größer:
>
- logisches kleiner:
<
- logisches kleiner gleich:
<=
- logisches größer gleich:
>=
filter(uni, # Datenquelle
city == "Giessen") # Filtervariable
filter(uni,
city == "Frankfurt" & study == "Political Science")
arrange()
Mit arrange() können wir den Datensatz sortieren.
arrange(uni,
abi)
Die Sortierung ist dabei immer aufsteigend. Dies kann man über die Funktion desc()
ändert (descending):
arrange(uni,
desc(abi))
Alternativ kann man auch einfach ein Minuszeichen vor die Variable, nach der sortiert werden soll, setzen:
arrange(uni,
-abi)
mutate()
Mit mutate() werden neue Variablen geschaffen.
Zum Beispiel könnten wir eine Variable schaffen, die den Abstand zum Mittelwert in der Variable abi
misst:
mutate(uni,
abiDist = abi - mean(abi,
na.rm = TRUE))
Wichtig: Wir haben zwar hier die Variable abiDist
gespeichert, aber diese nicht im Datensatz gespeichert.
Bei der Erstellung kategorieller Variablen muss man zusätzlich die Funktion case_when() nutzen. case_when() funktioniert wie eine Aneinanderreihung von if-Bedingung, wobei die spezifischste Bestimmung zuerst kommen sollte. (spezifisch -> allgemein).