## install.packages("dplyr")

library(dplyr)
zweit = read.table(file.path(pfadu, "zweit.df.txt"))

## 1. Grundfunktionen in `dyplr`: die sogenannten "Verben"

# Ein Grundprinzip von dyplr: komplexe Aufgaben --> Abfolge einfacher Aufgaben 
# als "Verben" verstehbar; die fuer uns wichtigsten dieser "Verben" sind:

# select()
# slice()
# filter()
# arrange()
# mutate()
# summarise() # man kann auch summarize() schreiben
# group_by()

## Beispiele für "Verben":
head(zweit)
zweitVpnG = select(zweit,Vpn,G) # waehle aus dem Dataframe "zweit" die Spalten "Vpn" und "G"
head(zweitVpnG)

## ------------------------------------------------------------------------
slice(zweit,1:3) #die ersten drei Zeilen

## ------------------------------------------------------------------------
filter(zweit,l1score>=120) # nur die Zeilen, 
# in denen ein l1score groesser oder gleich 120 vorkommt

## ------------------------------------------------------------------------
zl1up = arrange(zweit,l1score) # ordne nach den Werten in l1score, 
# aufsteigend
head(zl1up)

## mit desc() ---------------------------------------------------
zl1down = arrange(zweit,desc(l1score)) # ordne nach den Werten in l1score, 
# absteigend
head(zl1down)

## ------------------------------------------------------------------------
zweitdiff = mutate(zweit,diffl2l1=l2score-l1score) # erzeuge eine neue Spalte 
# namens "diffl2l1"", die die Differenz der Werte in den Spalten 
# "l2score" und "l1score" enthaelt
head(zweitdiff)

## ------------------------------------------------------------------------
summarise(zweit,min(l1score)) # zeige den kleinsten Wert der Spalte l1score
summarise(zweit,max(l1score)) # zeige den groessten Wert der Spalte l1score
summarise(zweit,mean(l1score)) # zeige das arithmetische Mittel der Werte der Spalte l1score
summarise(zweit,mean(l1score)) # zeige den Medianwert der Spalte l1score
summarise(zweit,sd(l1score)) # zeige die Stichprobenstandardabweichung der 
# Werte der Spalte l1score
summarise(zweit,IQR(l1score)) # zeige den Interquartilsabstand (also den Abstand 
# zwischen dem 75%-Quantil und dem 25%-Quantil) der Werte der Spalte l1score

## ------------------------------------------------------------------------
group_by(zweit,Ses) # gruppiere nach den Faktorstufen in Ses: low, mid, high

## ------------------------------------------------------------------------
summarise(group_by(zweit,Ses),mean(l2exposure)) #berechne pro Faktorenstufe 
# in Ses das arithmetische Mittel der Werte in der Spalte l2exposure

## ------------------------------------------------------------------------
summarise(group_by(zweit,Ses),mean(l2exposure))

#oder besser lesbar:

zweit %>% # nimm den Dataframe "zweit"
  group_by(Ses) %>% # teile diesen in Gruppen 
  # (basierend auf den Faktorstufen in Spalte "Ses") ein und tue alles 
  # Nachfolgende pro Gruppe
  summarise(mean(l2exposure)) # berechne das arithmetische Mittel der 
  # Werte in der Spalte "l2exposure"


## also so...
zweit %>%
  group_by(Ses) %>%
  summarise(mean(l2exposure)) 

# ...oder auch so

zweit %>% group_by(Ses) %>% summarise(mean(l2exposure)) 

# Komplexer:
# "Berechnen Sie die gruppenspezifischen (Spalte Ses) 
# Stichprobenstandardabweichungen der Differenzen aus den Scores 
# für die Zweit- und die Erstsprache (Spalten l2score bzw. l1score) 
# im Dataframe 'zweit'!"

# aufteilen:
  
#- a) nimm den Dataframe 'zweit'
#- b) errechne eine neue Spalte mit dem Namen 'diffl2l1', die die Differenzen der Spaltenwerte in 'l2score' und 'l1score' enthält
#- c) gruppiere nach den Faktorstufen in Ses
#- d) errechne die Stichprobenstandardabweichung für diffl2l1
zweit %>% # a)
  mutate(diffl2l1 = l2score - l1score) %>% # b)
  group_by(Ses) %>% # c)
  summarise(sd(diffl2l1)) # d)

## b) und c) sind hier vertauschbar:
zweit %>% # a)
  group_by(Ses) %>% # c)
  mutate(diffl2l1 = l2score - l1score) %>% # b)
  summarise(sd(diffl2l1)) # d)

# Weiterer Ueberblick über dplyr: https://github.com/rstudio/cheatsheets/raw/master/data-transformation.pdf

