---
title: "Lösungen zu Übung 2"
author: "Jonathan Harrington / Johanna Cronenberg"
date: "April 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"
dip <- read.table(file.path(url, "dip.txt"), stringsAsFactors = T)
preasp <- read.table(file.path(url, "preasp.txt"), stringsAsFactors = T)
```

# Q & A's

## 1. Basics

- **Q1.1**: *Bestätigen Sie, dass die Variable `V` im Data Frame `dip` ein Faktor ist.*

```{r}
class(dip$V)
```

- **Q1.2**: *Was sind die Stufen von diesem Faktor?*

```{r}
levels(dip$V)
```

- **Q1.3**: *Wieviele einzigartige Elemente gibt es in der Variable `Vpn` im Data Frame `dip`?*

```{r}
length(unique(dip$Vpn))
```

- **Q1.4**: *Lassen Sie sich mittels einer Funktion die Vorkommenshäufigkeit der verschiedenen Vokale `V` im Data Frame `dip` anzeigen.*

```{r}
table(dip$V)
```

- **Q1.5**: *Finden Sie mittels `table()` heraus, wie viele Tokens pro Vokalkategorie `V` pro Versuchsperson `Vpn` es im Data Frame `dip` gibt.*

```{r}
table(dip$V, dip$Vpn)
dip %>% select(V, Vpn) %>% table()
```

## 2. Filtering & Selecting

- **Q2.1**: *Lassen Sie sich vom Data Frame `dip` die Beobachtungen 1-10 ausgeben.*

```{r}
dip %>% slice(1:10)
```

- **Q2.2**: *Lassen Sie sich vom Data Frame `dip` die Beobachtungen 15, 18, 20 der Variable `V` ausgeben.*

```{r}
dip %>% 
  slice(15, 18, 20) %>% 
  select(V)
```

- **Q2.3**: *Lassen Sie sich vom Data Frame `dip` die Variablen `d` und `V` für die zehn Beobachtungen mit den höchsten `d`-Werten ausgeben.*

```{r}
dip %>% 
  select(d, V) %>% 
  slice_max(d, n = 10)
```

- **Q2.4**: *Lassen Sie sich vom Data Frame `dip` die letzten vier Beobachtungen ausgeben.*

```{r}
dip %>% slice_tail(n = 4)
```

- **Q2.5**: *Lassen Sie sich vom Data Frame `dip` alle ungeraden Zeilen ausgeben. Tipp: Mit der Funktion `seq()` können Sie einen Vektor von ungeraden Ganzzahlen erzeugen.*

```{r}
dip %>% slice(seq(1, nrow(dip), by = 2))
```

- **Q2.6**: *Lassen Sie sich alle Beobachtungen aus `dip` ausgeben, wo die Versuchsperson `Vpn` 67 ist und `d` höher als 190. (Ergebnis hat 5 Zeilen und 3 Spalten)*

```{r}
dip %>% filter(Vpn == 67 & d > 190)
```

- **Q2.7**: *Lassen Sie sich die fünf Beobachtungen mit den niedrigsten `d`-Werten aus `dip` ausgeben, wo der Vokal `V` nicht "aU" und nicht "OY" ist.*

```{r}
dip %>% 
  filter(!V %in% c("aU", "OY")) %>% 
  slice_min(d, n = 5)
```

- **Q2.8**: *Lassen Sie sich die Variable `d` aus dem Data Frame `dip` als Vektor ausgeben.*

```{r}
dip %>% pull(d)
```

- **Q2.9**: *Lassen Sie sich aus dem Data Frame `preasp` die ersten drei Beobachtungen für alle Variablen ausgeben, deren Spaltennamen auf "dur" endet.*

```{r}
preasp %>% 
  select(ends_with("dur")) %>% 
  slice_head(n = 3)
```

- **Q2.10**: *Lassen Sie sich aus dem Data Frame `preasp` die erste Beobachtung der Variablen `spk` bis `vc` ausgeben.*

```{r}
preasp %>% 
  select(spk:vc) %>% 
  slice(1)
```

## 3. Mutating & Renaming

- **Q3.1**: *Benennen Sie die Variablen im Data Frame `dip` dauerhaft um in `Dauer`, `Vokal`, `Versuchsperson`.*

```{r}
dip %<>% rename(Dauer=d, Vokal=V, Versuchsperson=Vpn)
```

- **Q3.2**: *Hängen Sie an den Data Frame `dip` temporär eine Spalte namens `Index` an, die die Zahlen von 1 bis 186 enthält.*

```{r}
dip %>% mutate(Index = 1:186)
```

- **Q3.3**: *Hängen Sie an den Data Frame `dip` dauerhaft eine Spalte namens `Länge` an, die den Wert "lang" enthält, wenn die Dauer höher ist als 200, "kurz" für Dauerwerte unter 100, und "mittel" für alle anderen Dauerwerte.*

```{r}
dip %<>% mutate(Länge = case_when(Dauer > 200 ~ "lang",
                                  Dauer < 100 ~ "kurz",
                                  Dauer > 100 & Dauer < 200 ~ "mittel"))
dip %>% head()
```

- **Q3.4**: *Hängen Sie an den Data Frame `dip` dauerhaft eine Spalte namens `Region` an, die den Wert "Bayern" enthält für die Versuchsperson 67 und "Berlin" für die Versuchsperson 68.*

```{r}
dip %<>% mutate(Region = ifelse(Versuchsperson == 67, "Bayern", "Berlin"))
dip %>% head()
```
