Daten & Packages laden

Laden Sie die folgenden Packages und Data Frames:

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
url <- "https://www.phonetik.uni-muenchen.de/studium_lehre/lehrmaterialien/R_speech_processing/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.
class(dip$V)
## [1] "factor"
# oder
dip %>% 
  pull(V) %>% 
  class()
## [1] "factor"
  • Q1.2: Was sind die Stufen von diesem Faktor?
levels(dip$V)
## [1] "aI" "aU" "OY"
# oder
dip %>% 
  pull(V) %>% 
  levels()
## [1] "aI" "aU" "OY"
  • Q1.3: Wieviele einzigartige Elemente gibt es in der Variable Vpn im Data Frame dip?
length(unique(dip$Vpn))
## [1] 2
# oder
dip %>% 
  pull(Vpn) %>% 
  unique() %>% 
  length()
## [1] 2
  • Q1.4: Lassen Sie sich mittels einer Funktion die Vorkommenshäufigkeit der verschiedenen Vokale V im Data Frame dip anzeigen.
table(dip$V)
## 
##  aI  aU  OY 
## 118  44  24
# oder
dip %>% 
  pull(V) %>% 
  table()
## .
##  aI  aU  OY 
## 118  44  24
  • Q1.5: Finden Sie mittels table() heraus, wie viele Tokens pro Vokalkategorie V pro Versuchsperson Vpn es im Data Frame dip gibt.
table(dip$V, dip$Vpn)
##     
##      S67 S68
##   aI  59  59
##   aU  22  22
##   OY  12  12
# oder
dip %>% 
  select(V, Vpn) %>% 
  table()
##     Vpn
## V    S67 S68
##   aI  59  59
##   aU  22  22
##   OY  12  12

2. Filtering & Selecting

  • Q2.1: Lassen Sie sich vom Data Frame dip die Beobachtungen 1-10 ausgeben.
dip %>% slice(1:10)
##          d  V Vpn
## 1  125.180 aI S67
## 2  119.690 aI S67
## 3  123.625 aI S67
## 4  116.940 aU S67
## 5  190.130 aI S67
## 6  146.063 aI S67
## 7  144.750 aU S67
## 8   93.130 OY S67
## 9  121.000 OY S67
## 10 121.940 aI S67
  • Q2.2: Lassen Sie sich vom Data Frame dip die Beobachtungen 15, 18, 20 der Variable V ausgeben.
dip %>% 
  slice(15, 18, 20) %>% 
  select(V)
##     V
## 15 aI
## 18 aI
## 20 aU
  • 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.
dip %>% 
  select(d, V) %>% 
  slice_max(d, n = 10)
##           d  V
## 120 284.650 aI
## 152 254.120 OY
## 109 251.078 aI
## 148 249.930 aI
## 143 234.940 aI
## 160 234.815 aI
## 186 231.570 aU
## 94  229.313 aI
## 163 229.060 aI
## 59  225.180 OY
  • Q2.4: Lassen Sie sich vom Data Frame dip die letzten vier Beobachtungen ausgeben.
dip %>% slice_tail(n = 4)
##          d  V Vpn
## 183 218.05 aU S68
## 184 169.07 aI S68
## 185 136.81 aI S68
## 186 231.57 aU S68
  • 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.
dip %>% slice(seq(1, nrow(dip), by = 2))
##           d  V Vpn
## 1   125.180 aI S67
## 3   123.625 aI S67
## 5   190.130 aI S67
## 7   144.750 aU S67
## 9   121.000 OY S67
## 11   92.000 aU S67
## 13  134.570 OY S67
## 15  183.125 aI S67
## 17   93.620 aI S67
## 19  137.880 aU S67
## 21   91.560 aI S67
## 23   98.250 aI S67
## 25   65.810 aI S67
## 27  203.980 aI S67
## 29  108.125 OY S67
## 31  125.310 aI S67
## 33  117.565 OY S67
## 35  104.750 aI S67
## 37  105.130 aI S67
## 39   61.870 aI S67
## 41  122.010 aU S67
## 43   99.620 aI S67
## 45  120.130 aI S67
## 47  110.370 aU S67
## 49  106.180 aI S67
## 51  158.430 aI S67
## 53   95.625 aI S67
## 55  179.060 aI S67
## 57  117.060 aI S67
## 59  225.180 OY S67
## 61  125.880 aI S67
## 63  118.690 aU S67
## 65  146.940 aU S67
## 67  145.940 aI S67
## 69  121.815 aI S67
## 71  116.320 aI S67
## 73  164.690 OY S67
## 75  119.560 aI S67
## 77  130.940 OY S67
## 79  139.190 aU S67
## 81  143.630 aI S67
## 83  120.810 aI S67
## 85  109.310 aI S67
## 87  131.190 OY S67
## 89   98.320 aI S67
## 91  187.310 aI S67
## 93  158.070 aU S67
## 95  193.510 aI S68
## 97  162.940 aU S68
## 99  185.250 aI S68
## 101 167.500 OY S68
## 103 110.880 aI S68
## 105 212.500 aI S68
## 107 134.625 aI S68
## 109 251.078 aI S68
## 111 145.810 aI S68
## 113  97.938 aU S68
## 115 123.070 OY S68
## 117 183.625 aI S68
## 119 124.680 aI S68
## 121 149.440 aU S68
## 123 152.940 aU S68
## 125 108.880 aI S68
## 127 150.312 aI S68
## 129 149.876 aI S68
## 131 201.500 aI S68
## 133 173.812 aI S68
## 135 208.310 aI S68
## 137 180.810 OY S68
## 139 104.320 aI S68
## 141 172.690 aI S68
## 143 234.940 aI S68
## 145 174.060 aU S68
## 147 164.750 aU S68
## 149 160.253 aI S68
## 151 150.688 aI S68
## 153 124.375 aI S68
## 155 203.680 aU S68
## 157 116.500 aI S68
## 159 202.500 aU S68
## 161 109.560 aI S68
## 163 229.060 aI S68
## 165 192.000 aI S68
## 167 176.620 aU S68
## 169 138.810 aU S68
## 171 129.570 aI S68
## 173 154.690 aU S68
## 175 134.750 aI S68
## 177 162.810 OY S68
## 179 164.940 aI S68
## 181 119.120 aU S68
## 183 218.050 aU S68
## 185 136.810 aI S68
  • Q2.6: Lassen Sie sich alle Beobachtungen aus dip ausgeben, wo die Versuchsperson Vpn “S67” ist und d höher als 190. (Ergebnis hat 5 Zeilen und 3 Spalten)
dip %>% filter(Vpn == "S67" & d > 190)
##         d  V Vpn
## 5  190.13 aI S67
## 27 203.98 aI S67
## 59 225.18 OY S67
## 70 205.25 aI S67
## 86 200.18 aI S67
  • 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.
dip %>% 
  filter(!V %in% c("aU", "OY")) %>% 
  slice_min(d, n = 5)
##         d  V Vpn
## 26 51.310 aI S67
## 39 61.870 aI S67
## 78 63.120 aI S67
## 25 65.810 aI S67
## 64 70.937 aI S67
# Alternativ:
dip %>% 
  filter(V != "au" & V != "OY") %>% 
  slice_min(d, n = 5)
##         d  V Vpn
## 26 51.310 aI S67
## 39 61.870 aI S67
## 78 63.120 aI S67
## 25 65.810 aI S67
## 64 70.937 aI S67

3. Mutating & Renaming & Arranging

  • Q3.1: Benennen Sie die Variablen im Data Frame dip um in Dauer, Vokal, Versuchsperson. Speichern Sie das Ergebnis als dipneu.
dipneu <- dip %>% 
  rename(Dauer = d, 
         Vokal = V, 
         Versuchsperson = Vpn)
dipneu %>% names()
## [1] "Dauer"          "Vokal"          "Versuchsperson"
  • Q3.2: Hängen Sie an den Data Frame dip eine Spalte namens Index an, die die Zahlen von 1 bis 186 enthält. Speichern Sie das Ergebnis als dip2.
dip2 <- dip %>% mutate(Index = 1:186)
dip2 %>% head()
##         d  V Vpn Index
## 1 125.180 aI S67     1
## 2 119.690 aI S67     2
## 3 123.625 aI S67     3
## 4 116.940 aU S67     4
## 5 190.130 aI S67     5
## 6 146.063 aI S67     6
  • Q3.3: Hängen Sie an den Data Frame dip 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. Speichern Sie das Ergebnis als dip3.
dip3 <- dip %>% mutate(Länge = case_when(d > 200 ~ "lang",
                                         d < 100 ~ "kurz",
                                         d > 100 & d < 200 ~ "mittel"))
# Alternativ:
dip3 <- dip %>% mutate(Länge = case_when(d > 200 ~ "lang",
                                         d < 100 ~ "kurz",
                                         TRUE ~ "mittel"))
dip3 %>% head()
##         d  V Vpn  Länge
## 1 125.180 aI S67 mittel
## 2 119.690 aI S67 mittel
## 3 123.625 aI S67 mittel
## 4 116.940 aU S67 mittel
## 5 190.130 aI S67 mittel
## 6 146.063 aI S67 mittel
  • Q3.4: Hängen Sie an den Data Frame dip eine Spalte namens Region an, die den Wert “Bayern” enthält für die Versuchsperson “S67” und “Berlin” für die Versuchsperson “S68”. Speichern Sie das Ergebnis als dip4.
dip4 <- dip %>% 
  mutate(Region = ifelse(Vpn == "S67", "Bayern", "Berlin"))
dip4 %>% head()
##         d  V Vpn Region
## 1 125.180 aI S67 Bayern
## 2 119.690 aI S67 Bayern
## 3 123.625 aI S67 Bayern
## 4 116.940 aU S67 Bayern
## 5 190.130 aI S67 Bayern
## 6 146.063 aI S67 Bayern
  • Q3.5: Ordnen Sie die Beobachtungen im Data Frame preasp nach aufsteigendem vdur und speichern Sie die Ausgabe in einem neuen Data Frame p2.df.
p2.df <- preasp %>% arrange(vdur)
p2.df %>% head()
##          spk    city region       vdur predur    clodur     reldur    clorel
## 611 LTp1A03D bergamo      N 0.03131224      0 0.1722173 0.06158074 0.2337981
## 301 LTp2A01N  napoli      S 0.03167616      0 0.1742189 0.01504618 0.1892650
## 300 LTp2A01M  milano      N 0.03398269      0 0.1741613 0.01380547 0.1879667
## 337 LTp2A04E   parma      N 0.03459090      0 0.2023043 0.01572313 0.2180275
## 591 LTp1A01P palermo      S 0.03647081      0 0.1651913 0.04004638 0.2052377
## 647 LTp2A01M  milano      N 0.03748507      0 0.1108254 0.05785740 0.1686828
##     preclorel        vc       cv vtype cplace ptonic         word     Pre
## 611 0.2337981 0.2651103 7.466667     e     kk      N specchiettok +preasp
## 301 0.1892650 0.2209412 5.975000     a     pp      N     cappello +preasp
## 300 0.1879667 0.2219494 5.531250     a     pp      N     cappello +preasp
## 337 0.2180275 0.2526184 6.303030     a     pp      N     cappello +preasp
## 591 0.2052377 0.2417085 5.627451     e     kk      N specchiettok +preasp
## 647 0.1686828 0.2061679 4.500000     e     kk      N specchiettok +preasp
  • Q3.6: Ordnen Sie die Beobachtungen im Data Frame preasp alphabetisch geordnet nach city und innerhalb von city nach absteigendem vdur. Speichern Sie das Ergebnis in einem neuen Data Frame p3.df.
p3.df <- preasp %>% arrange(city, desc(vdur))
p3.df %>% head()
##          spk city region      vdur     predur    clodur     reldur    clorel
## 550 LTp2A03B bari      S 0.1699400 0.05157383 0.1530305 0.12512994 0.2781605
## 466 LTp1A01B bari      S 0.1611962 0.00000000 0.2240525 0.09833980 0.3223923
## 921 LTp2A04B bari      S 0.1592929 0.00000000 0.2396700 0.01534473 0.2550148
## 536 LTp2A02B bari      S 0.1584337 0.00000000 0.1762963 0.07688695 0.2531833
## 803 LTp2A04B bari      S 0.1557302 0.00000000 0.2561311 0.02486709 0.2809982
## 699 LTp1A01B bari      S 0.1546070 0.03675589 0.2202894 0.02469536 0.2449848
##     preclorel        vc       cv vtype cplace ptonic         word     Pre
## 550 0.3297343 0.4996743 1.940299     o     kk      Y        occhi -preasp
## 466 0.3223923 0.4835885 2.000000     o     kk      Y        occhi +preasp
## 921 0.2550148 0.4143077 1.600917     e     tt      Y        tetto +preasp
## 536 0.2531833 0.4116170 1.598039     o     kk      Y        occhi +preasp
## 803 0.2809982 0.4367283 1.804391     e     tt      Y specchiettot +preasp
## 699 0.2817407 0.4363477 1.822302     e     tt      Y specchiettot -preasp