tidy up statclass

In der Tabelle kann die Note jeder Person aus jeder Prüfung ausgelesen werden. Überlegt kurz, welche Variablen wir bei diesem Satz generieren möchten!

statclass
##     name stat1 stat2  r spss
## 1   momo    12     5  6    9
## 2    kim    14    10 13   15
## 3 sascha     7     4  4    1
  • names: momo, sascha, kim
  • course: statI, statII, r, spss
  • grade: Wert in Abhängigkeit der zwei oberen.

Es sind also zwei Informationen in den Spalten stat1, stat2, r und spss. Nämlich welcher Test es ist (implizit über Variablenname) und die Note. D.h. hier sind Werte als Variablenname angegeben und das verstößt gegen die Regeln eines tidy Datensatzes. Wir benötigen in einem tidy-Format aber beide Informationen explizit! Denn die Spaltennamen sind hier Werte (Art der Prüfung) und nicht einfach Namen.

Um dies zu bereinigen, nutzt man pivot_longer(). Hierbei geben wir zuerst an, welche Spalten neugeordnet werden sollen (in unserem Fall stat1 bis spss), dann in welche neuen Variablen die Namen bzw. die Werte gespeichert werden sollen. Mit names_to benennen wir die neue Variable, die den Test unterscheidet und mit values_to benennen wir die Variable, die die Noten beinhaltet.

statclassTidy <- statclass %>% 
  pivot_longer(
    stat1:spss, 
    names_to = "course", 
    values_to = "grade"
  ) %>% 
  arrange(
    name,
    course
  )

statclassTidy
## # A tibble: 12 × 3
##    name   course grade
##    <chr>  <chr>  <dbl>
##  1 kim    r         13
##  2 kim    spss      15
##  3 kim    stat1     14
##  4 kim    stat2     10
##  5 momo   r          6
##  6 momo   spss       9
##  7 momo   stat1     12
##  8 momo   stat2      5
##  9 sascha r          4
## 10 sascha spss       1
## 11 sascha stat1      7
## 12 sascha stat2      4

Jetzt haben wir ein long-Format, dass die Datenbearbeitung oft einfacher macht (z.B. mit ggplot2). Aber Aufpassen: Man kann jetzt nicht einfach mehr einen Mittelwert von grade berechnen, da dies verschiedene Kurse beinhaltet. Man muss dabei also Bedingungen setzen (wenn man im long-Format ist).

Möchte man dies wieder umkehren, nutzt man die Funktion pivot_wider():

statclassRe <- statclassTidy %>% 
  pivot_wider(
    names_from = course, 
    values_from = grade, 
  )

statclassRe