---
title: "Übung 4"
author: "Jonathan Harrington / Johanna Cronenberg"
date: "Mai 2021"
output: 
  html_document:
    number_sections: FALSE
    theme: flatly
    highlight: pygments
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# Daten & Packages laden

Laden Sie die folgenden Packages und Data Frames:

```{r}
library(tidyverse)
library(magrittr)
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.*

```{r}

```

- **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.*

```{r}

```

- **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)*

```{r}

```

- **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)*

```{r}

```

- **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)*

```{r}

```

## 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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

## 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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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.*

```{r}

```

- **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()`.*

```{r}

```

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

```{r}

```

