Created
November 1, 2023 22:32
-
-
Save selfawaresoup/c1931eb17a289c5d2de55667acf9fc6a to your computer and use it in GitHub Desktop.
dplyr-pipe tutorial (deutsch)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################################################ | |
# "Pipe" operator in R: %>% # | |
################################################################################ | |
# Vorbereitung | |
# Bitte einmal dieses R-Script mit "Source" ausführen, damit alles läuft. | |
# Kann sein, dass R-Studio eine Warnung anzeigt, dass ein Packet fehlt, | |
# In dem Fall ruhig bestätigen, und dann wird dplyr automatisch installiert. | |
# | |
# Alternativ geht das auch mit: | |
# install.packages("dplyr") | |
# Oder im "Packages" Fenster unten rechts in RStudio | |
# (wichtig: "dplyr", nicht "dbplyr") | |
# Dplyr laden, generell sehr nützliches Paket | |
# https://dplyr.tidyverse.org/index.html | |
library(dplyr) | |
################################################################################ | |
# Einfaches Beispiel | |
c(1,2,3,4,5) -> numbers | |
# diese Zeile … | |
numbers %>% sum() | |
# macht genau das gleiche wie | |
sum(numbers) | |
# Allgemein: a %>% b() nimmt die Variable a und sie als Argument | |
# an die Funktion b: also b(a) | |
# | |
# Wenn b noch weitere Argumente hat, werden die HINTER a eingereiht: | |
# a %>% b(x, y, z) wird zu b(a, x, y, z) | |
# | |
# Das ganze lässt sich dann immer weiter verketten: | |
# a %>% b(x) %>% c(y, z) | |
# entspricht | |
# c(b(a, x), y, z) | |
# und da zeigt sich wieviel unübersichtlicher es ohne %>% wird | |
# Manche benutzen auch |>, was das gleiche tut wie %>%, | |
# aber nur in neueren R Versionen geht. |> benötigt aber nicht dplyr | |
################################################################################ | |
# Realistisches Beispiel | |
# Beispieldaten | |
read.csv(text="wochentag,Veranstaltung | |
1, Übung Statistik Kurs A | |
2, Übung Statistik Kurs B | |
3, Vorlesung Einführung in die Psychologie | |
3, SE Wie wahr ist die Wahrnehmung? | |
3, Vorlesung Statistik | |
3, Vorlesung Start ins Studium | |
3, Übung Start ins Studium Kurs A | |
3, Übung Start ins Studium Kurs B | |
3, Übung Start ins Studium Kurs C | |
3, Übung Start ins Studium Kurs D | |
3, Ringvorlesung Anwendungsfelder der Psychologie | |
4, Übung Statistik I Kurs C | |
4, Übung Statistik I Kurs D | |
4, Vorlesung Allgemeine Psychologie | |
4, Seminar Allgemeine Psychologie Kurs A | |
4, Seminar Allgemeine Psychologie Kurs B | |
5, Seminar Biologosche Psychologie Kurs A | |
5, Seminar Biologosche Psychologie Kurs B | |
5, Seminar Biologosche Psychologie Kurs C | |
5, Tutorium Statistik I Kurs A | |
5, Tutorium Statistik I Kurs B") -> veranstaltungen | |
# Wochentag von Zahl in Faktor umwandeln | |
veranstaltungen$wochentag %>% as.factor() -> veranstaltungen$wochentag | |
# Labels für die Faktor-Spalte Wochentag | |
c("Montag", | |
"Dienstag", | |
"Mittwoch", | |
"Donnerstag", | |
"Freitag") -> levels(veranstaltungen$wochentag) | |
# wichtig: bei Mehrzeiligen Anweisungen muss %>% immer VOR den Zeilenumbruch | |
# Sonst nimmt R an, dass die Anweisung nach der ersten Zeile schon zuende ist | |
veranstaltungen %>% | |
group_by(wochentag) %>% # gruppiert nach Wochentag | |
summarise(anzahl = n()) %>% # zählt die Verstaltungen für jeden Tag | |
arrange(-anzahl) %>% # sortiert nach anzahl, absteigend | |
top_n(1) # lässt nur den obersten Eintrag stehen | |
# Ergebnis: Mittwoch hat die meisten Verasnstaltungen, 9 insgesamt | |
# Ohne %>% wäre genau das gleiche: | |
top_n( | |
arrange( | |
summarise( | |
group_by(veranstaltungen, wochentag), | |
anzahl = n()), | |
-anzahl), | |
1) | |
# … sehr unübersichtlich, schwer zu lesen und sehr fehleranfällig | |
# | |
# Verschachtelte Klammern sind eine extrem häufige Fehlerquelle in den meisten | |
# Programmiersprachen. %>% hilft sehr dabei, sie zu vermeiden. | |
################################################################################ | |
# Esther Weidauer, 2023 # | |
# # | |
# Bye <3 # | |
################################################################################ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment