library(ggplot2)

# Zur Information bezüglich Indizierung:
#
# Spalten (Variablen) aus Data-Frames können auf drei verschiedene Weisen indiziert werden. 
# (a) Durch die Spaltenzahl
coronal = read.table(file.path(pfadu, "coronal.txt"))
coronal[,2]
# (b) Durch den Namen der Variable:
coronal$Region
# (c) Mit with() und Namen der Variable:
with(coronal, Region)

# Daher tabellieren:
table(coronal[,2])
# oder
table(coronal$Region)
# oder
with(coronal, table(Region))
# 1.
# Für den Data-Frame dip
dip = read.table(file.path(pfadu, "dip.txt"))

# Schreiben Sie R-Befehle für:

# Die Namen der Variablen
names(dip)

# Die Reihen- und Spaltenanzahl von diesem Data-Frame
dim(dip)

# Bestätigen Sie, dass die die Variable V ein Faktor ist. Was sind die Stufen von diesem Faktor?
class(dip$V)
levels(dip$V)
#oder einfach
dip$V

# Was für eine Objekt-Sorte ist die Variable d?
class(dip$d)

# Wieviele Stufen hat der Faktor Vpn?
levels(dip$Vpn)
#ergibt aber NULL
# Manchmal kommt es vor, dass Kategorien (wie die Vpn hier) nicht 
# als solche erkannt werden, da sie durch Zahlen kodiert sind.
class(dip$Vpn)
# Trotzdem sind sie natürlich keine kontinuierliche Variable;
# um die Frage dennoch zu beantworten, wäre das hier möglich:
unique(dip$Vpn)
#Besser: dip$Vpn sollte als factor gespeichert sein. 
#Daher:
dip$Vpn=factor(dip$Vpn)
dip$Vpn
class(dip$Vpn)
#dann
levels(dip$Vpn)

# Erstellen Sie eine Tabelle der Elemente in der Variable V.
with(dip, table(V))
# oder
table(dip$V)

# Erstellen Sie eine gekreuzte Tabelle für die Elemente in V und in Vpn
# (= wieviele Tokens pro Vokalkategorie pro Versuchsperson)
with(dip, table(V, Vpn))

# oder einfach
table(dip[,c("V","Vpn")])

# ohne Variablennamen:
table(dip$V,dip$Vpn)

# Schreiben Sie R-Befehle für:

# Beobachtungen 1-10
dip[1:10,]

# Beobachtungen 15, 18, 20 der Variable V
dip$V[c(15, 18, 20)]

# Alle Beobachtungen der Variablen d und V
#wenn wir wissen, an welcher Stelle die Variablen kommen:
dip[,-3] #=alle, außer der dritten Spalte
dip[,1:2]
dip[,c("d","V")]

# Die vorletzte Beobachtungen
n = nrow(dip)
dip[n-1,]
#oder direkt:
dip[nrow(dip)-1,]
#oder auch
tail(dip,n=2)[1,]

# Die letzten 4 Beobachtungen
dip[(n-3):n,]
#oder
tail(dip,n = 4)


# 2.
# Mit der Funktion seq() können Sie einen Vektor der ungeraden Ganzzahlen zwischen 1 und 20 erzeugen wie folgt:

seq(from=1, to = 20, by = 2)
#oder einfach
seq(1,20,2)
#gerade Zahlen bis 20 wären also:
seq(2,20,2)

# Schreiben Sie einen R-Befehl, um alle ungeraden Reihen von dem Data-Frame zu bekommen.
x = seq(from = 1, to = nrow(dip), by = 2)
dip[x,]
#oder
dip[seq(1,nrow(dip),2),]

# erstellen Sie einen Boxplot der Dauer für den Faktor Vokal (V). 
# Gibt es systematische Dauer-Unterschiede zwischen den Diphthongen?
ggplot(dip) + 
  aes(y = d, x = V) + 
  geom_boxplot()
# Nein es gibt keine systematischen Dauer-Unterschiede zwischen den Diphthongen!

# 3.
# Für den Data-Frame rating:
rating = read.table(file.path(pfadu, "rating.txt"))

# erstellen Sie einen Boxplot um einzuschätzen, 
# inwiefern Rating von der Grammatikalität (Gram) 
# beeinflusst werden.

ggplot(rating) +
  aes(y = Rating,x = Gram) +
  geom_boxplot()







######################################################################################################
# 4.
# Zur Erinnerung:
# Mit der rep() Funktion können Elemente von einem Vektor wiederholt werden z.B.
rep("W", 4)
# [1] "W" "W" "W" "W"
rep(c("A", "B"), 4)
# [1] "A" "B" "A" "B" "A" "B" "A" "B"
rep(c("A", "B"), each = 4)
# [1] "A" "A" "A" "A" "B" "B" "B" "B"
#
# Erstellen Sie mit den c() und rep() Funktionen, 
# Vektoren mit dem folgenden Inhalt:
# "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d" "e" "e" "e"

rep(c("a","b","c","d","e"),each = 3)

# "m" "m" "m" "w" "w" "w" "m" "m" "m" "w" "w" "w"

rep(c("m","w"),each=3,2)


######################################################################################################
# 5.
# Die paste() Funktion kann verwendet werden, um Elemente in einem Element 
# zusammenzubinden. z.B.
vec = paste("Montag", "Nachmittag")
vec
# "Montag Nachmittag"
length(vec)
# 1
paste("Montag", "Nachmittag", sep=".")
# "Montag.Nachmittag"
paste("Montag", "Nachmittag", sep="")
# "MontagNachmittag"
#==
paste0("Montag", "Nachmittag")
# "MontagNachmittag"
paste("X", 1:10, sep="")
# "X1"  "X2"  "X3"  "X4"  "X5"  "X6"  "X7"  "X8"  "X9"  "X10"
#
# Erstellen Sie Vektoren mit dem folgenden Inhalt
# "10.Z" "11.Z" "12.Z" "13.Z" "14.Z" "15.Z" "16.Z" "17.Z" "18.Z" "19.Z" "20.Z"

paste(10:20,"Z",sep=".")
paste(10:20,".Z",sep="")
paste0(10:20,".Z")
# "Sprecher#1" "Sprecher#2" "Sprecher#3" "Sprecher#4" "Sprecher#5"

paste0("Sprecher#",1:5)


######################################################################################################
#6
# Die Funktion data.frame() kann verwendet werden, 
# um einen Data-Frame aus Vektoren zu bauen. z.B. 
# Hier sind die Zeiten, die ich benötige, um 
# zum Institut von zu Hause zu kommen am Montag-Freitag:
zeit = c(18, 21, 20, 19, 24)
tage = c("Mo", "Di", "Mi", "Do", "Fr")
# Data-Frame bauen
data.frame(zeit,tage)
df = data.frame(Dauer = zeit, Tag = tage)
# Eigenschaften
class(df)
# "data.frame"
dim(df)
# 5 2
names(df)
# "Dauer" "Tag"
class(df$Dauer)
# "numeric"
class(df$Tag)
# "factor"
levels(df$Tag)
# "Di" "Do" "Fr" "Mi" "Mo"
# Sie können jederzeit eine zusätzliche Variable hinzufügen. 
# z.B. sind hier noch Daten, ob es geregnet hat oder nicht:
wetter = c("nass", "nass", "trocken", "trocken", "trocken")
df = data.frame(df, Wetter = wetter)
df$Wetter = wetter
# So können Sie dann den Data-Frame auf Ihrer Festplatte als Textdatei ablegen:
write.table(df, file.path(pfad, "df.txt"), quote=F)
#
#Hier die eigentliche Aufgabe:
# Die Vokaldauer von fünf Versuchspersonen (Vpn1, 2, ...5) wurden gemessen, wie folgt:
dauer = c(100, 90, 110, 105, 80)
# Die ersten drei Vokale waren /e/ die letzten zwei waren /a/ Vokale. Erstellen Sie einen 
# Data-Frame genannt vokale.df mit den Dauerwerten und mit einem Faktor für die 
# Versuchsperson und mit noch einem Faktor für den Vokal 
# (also einen Data-Frame aus 5 Reihen und 3 Spalten).
vokale=c("e","e","e","a","a")
Vpn = paste("Vpn",1:5,sep="")
vokale.df = data.frame(Dauer = dauer, Vokal = vokale, Vpn)





##############################################################################
#7
# 12 Sprecher und 12 Sprecherinnen aus München und Wien produzierten ein /I/ und F2 wurde 
# gemessen (einen Wert pro Versuchsperson). 
# Die F2-Werte in Hz für die 24 Versuchspersonen sind unten angeführt. 
# Bauen Sie einen Data-Frame mit Faktoren F2, Geschlecht, Dialekt, und 
# Versuchsperson für diese Daten:

# Hier sind die F2 Werte
# Wien (weiblich)
Ww = c(2821, 2654, 2750, 2664, 2873, 2755)
# Wien (männlich)
Wm = c(2149, 2354, 2296, 2094, 2309, 2069)
# München (weiblich)
Mw = c(2586, 2330, 2209, 2085, 2301, 2394)
# München (männlich)
Mm = c(1982, 1672, 2216, 1563, 1905, 1841)

# Einen Vektor aus Ww Wm, Mw, Mm
F2 = c(Ww,Wm,Mw,Mm)
# Einen Vektor für die Sprecher
Versuchspersonen = paste0("S_",1:24)
# Einen Vektor für Geschlecht
Geschlecht = rep(c("weiblich","männlich"),each=6,2)

# Einen Vektor für die Stadt
Stadt = rep(c("Wien","München"),each=12)


# Alles zu einem data-frame bauen
I.df = data.frame(F2,Sprecher = Versuchspersonen,Geschlecht,Stadt)


##############################################################################
#8
# In einem Perzeptionstest hörten dieselben Versuchspersonen ein ambiges Wort zwischen Miete und Mitte, 
# und sie mussten pro Stimulus zwischen den Wortpaaren wählen (ob "Miete" oder "Mitte"). 
# Ihre Antworten waren wie unten angeführt. 
# Ergänzen Sie Ihren Data-Frame (also zusätzliche Spalten hinzufügen).
# Wien (weiblich)
ww = c("Miete",  "Miete",  "Mitte",  "Miete",  "Miete",  "Miete")
# Wien (männlich)
wm = c("Mitte",  "Miete",  "Miete",  "Mitte",  "Miete",  "Miete")
# München (weiblich)
mw = c("Mitte",  "Mitte",  "Mitte",  "Miete",  "Miete",  "Miete")
# München (männlich)
mm = c("Mitte",  "Mitte",  "Miete",  "Mitte",  "Miete",  "Mitte")

# In einen data-frame einbinden. Vergessen Sie diejenigen Spalten nicht, die die Herkunft und das Geschlecht kodieren!!
# Einige der benötigten Spalten existieren bereits als Vektoren; daher:
Perzeption.df = data.frame(Antworten = c(ww,wm,mw,mm),Hörer = Versuchspersonen, Geschlecht, Stadt)
# Legen Sie den Data-Frame als Text-Datei mit dem Namen d.txt auf Ihrer Festplatte ab.
write.table(Perzeption.df,file = file.path(pfad,"Wien_München_Miete-Mitte_Perzeption.txt"))
