Skip to content
Snippets Groups Projects
dplyr-grammar.Rmd 12.40 KiB
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).