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
<- "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"
url <- read.table(file.path(url, "rating.txt")) %>% as_tibble()
rating <- read.table(file.path(url, "preasp.txt")) %>% as_tibble()
preasp <- read.table(file.path(url, "vcvC.txt")) %>% as_tibble()
vcv <- read.table(file.path(url, "vdata.txt")) %>% as_tibble()
vdata <- read.csv(file.path(url, "hp_looks.txt"), sep="") %>% as_tibble()
hp_looks <- read.csv(file.path(url, "hp_measures.txt"), sep="") %>% as_tibble()
hp_measures <- read.csv(file.path(url, "hp_meta.txt"), sep="") %>% as_tibble()
hp_meta <- read.csv(file.path(url, "hp_names.txt"), sep="") %>% as_tibble()
hp_names <- read.csv(file.path(url, "hp_wiz.txt"), sep="") %>% as_tibble()
hp_wiz <- read.table(file.path(url, "param.txt"), stringsAsFactors = F) %>%
p ::filter(nchar(Vpn) > 4) %>%
dplyras_tibble()
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)
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.
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!