Daten & Packages laden

Laden Sie die folgenden Packages und Data Frames:

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.4     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   2.0.1     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
## The following object is masked from 'package:tidyr':
## 
##     extract
url <- "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"
rating <- read.table(file.path(url, "rating.txt")) %>% as_tibble()
preasp <- read.table(file.path(url, "preasp.txt")) %>% as_tibble()
vcv <- read.table(file.path(url, "vcvC.txt")) %>% as_tibble()
vdata <- read.table(file.path(url, "vdata.txt")) %>% as_tibble()
hp_looks <- read.csv(file.path(url, "hp_looks.txt"), sep="") %>% as_tibble()
hp_measures <- read.csv(file.path(url, "hp_measures.txt"), sep="") %>% as_tibble()
hp_meta <- read.csv(file.path(url, "hp_meta.txt"), sep="") %>% as_tibble()
hp_names <- read.csv(file.path(url, "hp_names.txt"), sep="") %>% as_tibble()
hp_wiz <- read.csv(file.path(url, "hp_wiz.txt"), sep="") %>% as_tibble()
p <- read.table(file.path(url, "param.txt"), stringsAsFactors = F) %>% 
  dplyr::filter(nchar(Vpn) > 4) %>% 
  as_tibble()

Q & A’s

1. Datenmanipulation mit dplyr & tidyr

  • Q1.1: Benennen Sie die Spalten x, y und z im Data Frame diamonds (wird automatisch mit dem tidyverse geladen) um in laenge, breite und tiefe. Erstellen Sie dann durch pivoting eine neue Spalte measure aus den drei umbenannten Spalten und eine neue Spalte value, die deren Werte enthält.

  • Q1.2: In der Spalte Vpn des Data Frames p befinden sich drei Informationen: Alter, Region und Staat, getrennt durch Unterstriche. Teilen Sie die Informationen dauerhaft in drei neue, sinnvoll benannte Spalten auf.

  • Q1.3: Lassen Sie sich aus dem Data Frame p alle Beobachtungen ausgeben, wo die Versuchsperson zwischen 85 und 90 Jahren alt, der Context Cont “mie” und der Messwert slopes größer oder gleich 1.0 ist. (Ergebnis hat 2 Zeilen und 6 Spalten)

  • Q1.4: Wählen Sie aus dem Data Frame vdata die Spalten F1 bis Cons aus sowie alle Beobachtungen, für die die Versuchsperson Subj nicht “bk” oder “hp” oder “ta” ist; formen Sie den Data Frame dann so um, dass die Formanten F1 und F2 in einer neuen Spalte formant und die F1- und F2-Werte in einer neuen Spalte value erscheinen. (Ergebnis hat 3424 Zeilen und 6 Spalten)

  • Q1.5: Finden Sie die durchschnittliche Reaktionszeit RT pro Versuchsperson Subject, Vokal Vowel und Sprache Lang im Data Frame vcv heraus. Fügen Sie dem daraus resultierenden Data Frame eine Spalte namens tempo hinzu, die folgende Werte enthält: “schnell” für alle mittleren Reaktionszeiten unter 500 ms, “mittel” für Reaktionszeiten zwischen 500 und 575 ms, “okay” für Reaktionszeiten zwischen 575 und 650 ms, “langsam” für Reaktionszeiten zwischen 650 und 800 ms, und “sehr langsam” für alle Reaktionszeiten über 800 ms. Finden Sie anschließend heraus, wie häufig jeder Wert der Variable tempo vorkommt. (Ergebnis hat 5 Zeilen und 2 Spalten)

2. Magical Joining mit dplyr

  • Q2.1: Verbinden Sie die beiden Data Frames hp_names und hp_meta so miteinander, dass alle Beobachtungen und alle Spalten aus beiden Data Frames im Ergebnis erhalten bleiben. Nutzen Sie die Spalte id als key. Es gibt hier verschiedene Lösungswege.

  • Q2.2: Verbinden Sie die Data Frames hp_names und hp_wiz über die Spalte id, sodass nur Zeilen aus hp_wiz erhalten bleiben und das Ergebnis die Spalten beider Data Frames enthält. Es gibt hier verschiedene Lösungswege.

  • Q2.3: Verbinden Sie die Data Frames hp_names und hp_wiz über die Spalte id, sodass alle Zeilen aus hp_names erhalten bleiben und das Ergebnis die Spalten beider Data Frames enthält. Fehlende Werte sollen als NA im Ergebnis erscheinen. Es gibt hier verschiedene Lösungswege.

  • Q2.4: Verbinden Sie die Data Frames hp_names und hp_looks über die Spalte id, sodass alle Beobachtungen und alle Spalten aus beiden Data Frames erhalten bleiben und die Spalten notfalls mit NA gefüllt werden. Hier gibt es nur eine Lösung.

  • Q2.5: Finden Sie mittels eines filtering joins über die Spalte id heraus, für welche Beobachtungen in hp_looks es keinen Match in hp_names gibt. Hier gibt es nur eine Lösung.

  • Q2.6: Finden Sie mittels eines filtering joins über die Spalte id heraus, für welche Beobachtungen in hp_names es keinen Match in hp_looks gibt. Hier gibt es nur eine Lösung.

  • Q2.7: Verbinden Sie die Data Frames hp_names und hp_looks über die Spalte id, sodass alle Beobachtungen und alle Spalten aus beiden Data Frames erhalten bleiben, für die es einen Match in beiden Data Frames gibt (keine neu erzeugten NA-Werte im Ergebnis). Hier gibt es nur eine Lösung.

  • Q2.8: Finden Sie mittels eines filtering join über die Spalte id heraus, für welche Personen in hp_names es Messwerte in hp_measures gibt. Hier gibt es nur eine Lösung.

3. Abbildungen mit ggplot2

Bei allen folgenden Plots dürfen Sie gerne mit den ggplot2 Spezifikationen spielen: Verändern Sie die Farben, Punkt-Shapes, Linientypen, Schriftgröße, Achsenbeschriftungen…

  • Q3.1: Erstellen Sie einen Density Plot anhand des Data Frames rating. Auf der x-Achse soll das Rating angezeigt werden. Trennen Sie Panels nach Familiarität Fam in Zeilen und Sprache Lang in Spalten.

  • Q3.2: Zeigen Sie anhand des Data Frames preasp mit einem Boxplot den Einfluss von Artikulationsstelle cplace auf die Verschlussdauer clodur. Farbkodieren Sie die Boxplots nach Artikulationsstelle und erstellen Sie verschiedene Panels für die Variable Region. Schreiben Sie unter Ihrem Code Ihre Einschätzung zu der Fragestellung als Kommentar auf.

  • Q3.3: Erstellen Sie ein Histogramm über die Reaktionszeiten RT im Data Frame vcv mit einer Balkenbreite von 75. Stellen Sie die drei Vokale in getrennten Panels dar.

  • Q3.4: Erstellen Sie einen Lineplot mit allen Beobachtungen aus dem Data Frame billboard für die folgenden Künstler artist: “No Doubt”, “Spears, Britney”, “TLC”, “Aguilera, Christina”, “Backstreet Boys, The”, “Pink”, “Destiny’s Child”. Auf der y-Achse soll das Ranking und auf der x-Achse die Kalenderwoche aufgetragen werden – dazu müssen Sie die Spalten rank und week mittels pivoting erstellen. Nutzen Sie außerdem die Funktion factor() innerhalb von mutate(), um die Werte in der Spalte week in einen Faktor mit den Levels 1 bis 32 umzuwandeln. Die Linien sollen nach dem Künstler farbkodiert werden. Da es pro Künstler zum Teil mehrere Songs in den Charts gibt, müssen Sie den aesthetic mappings noch group = track hinzufügen.

  • Q3.5: Erstellen Sie einen traditionell-phonetischen Formantplot (d.h. einen Scatterplot) mit dem Data Frame vdata. Wählen Sie zuerst nur die Zeilen aus dem Data Frame aus, wo der Vokal V entweder “A” oder “I” oder “U” ist. F2 gehört auf die x- und F1 auf die y-Achse. Farbkodieren Sie die Abbildung nach Vokal und erstellen Sie verschiedene Panels für die einzelnen Versuchspersonen Subj. Sorgen Sie zuletzt dafür, dass die Achsen jeweils umgedreht werden, also von hohen zu niedrigen Werten; nutzen Sie dafür die folgenden zwei Funktionen: scale_x_reverse() und scale_y_reverse().

  • Q3.6: Just for fun: Nutzen Sie die hp... Data Frames, um sich ein paar magische Plots auszudenken!