class: center, title-slide, middle # Umgang mit Datensätzen ## Daten bändigen & visualisieren ### B. Philipp Kleer ### Methodentage 2021 ### 11. Oktober 2021 .social[ [<svg viewBox="0 0 512 512" style="position:relative;display:inline-block;top:.1em;fill:#EB811B;height:1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z"></path></svg>](https://orcid.org/0000-0003-1935-387X) [<svg viewBox="0 0 512 512" style="position:relative;display:inline-block;top:.1em;fill:#EB811B;height:1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z"></path></svg>](https://gitlab.com/bpkleer) [<svg viewBox="0 0 512 512" style="position:relative;display:inline-block;top:.1em;fill:#EB811B;height:1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"></path></svg>](https://www.uni-giessen.de/faculties/f03/departments/dps/staff/researchers/kleer?set_language=en) [<svg viewBox="0 0 448 512" style="position:relative;display:inline-block;top:.1em;fill:#EB811B;height:1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z"></path></svg>](https://www.researchgate.net/profile/Benedikt_Kleer) ] --- # Tidyr und dplyr Daten können in verschiedenen Formaten vorliegen. Die zwei bekanntesten sind wohl das -- 1. *long*-Format -- 2. *wide*-Format (*standard*) -- Aber auch andere Formate für Daten sind möglich. Z.B. wenn wir Daten über eine API laden. Auch bei Zusammenführen von Datensätzen muss das Format beachtet werden. -- Diese verschiedenen Varianten werden wir uns nun in `tidyverse` mithilfe von `tidyr` und `dplyr` anschauen. ??? Das Wide-Format eignet sich für die Darstellung von Querschnittsdaten oder Zeitreihendaten. Im Wide-Format enthalten mehrere Spalten die Messwerte der gleichen Variable zu unterschiedlichen Zeitpunkten oder Versuchswiederholungen, während das Individuum oder Beobachtungseinheit die ganze Zeile der Tabelle beansprucht. Diese Art der Darstellung ist intuitiv für den Vergleich von verschiedenen Werten der gleichen Variable, aber ungeeignet für die Darstellung von Paneldaten mit mehr als einer Variable. Im Long-Format werden alle Werte der messwiederholten Variable in der gleichen Spalte und der zugehörige Zeitpunkt in einer eigenen Variable dargestellt. Daher werden die Daten im Long-Format auch als „gestapelt“ bezeichnet. Weitere Variablen werden in einer eigenen Spalte notiert, nutzen jedoch ebenfalls die Werte der Zeitvariable. Die Zeitvariable (die auch die Versuchswiederholung oder den Kontext der Messung angeben kann), ist somit explizit angegeben. --- class: inverse2, mline, center, middle # tidyr und Datensatz-Formate --- # Das Gerüst von Datensätzen mit tidyr Es ist für die Verarbeitung in R wichtig, dass die Datensätze *tidy* sind, damit die Funktionen in R problemlos mit den Daten laufen. Zum Beispiel für die Anwendung von `ggplot` empfehlen sich *tidy*-Datensätze. Das bedeutet, dass die Daten in einem bestimmten Format vorliegen müssen, damit die Funktionen in R auch gut mit den Daten funktionieren (weniger *troubleshooting*). -- **Was ist ein Datensatz?** -- Ein Datensatz ist generell immer eine Sammlung von Werten, sei es numerisch oder eine Zeichenkette. Diese Werte sind immer auf zwei Arten organisiert: Jeder Wert gehört zu einer **Variable** und zu einer **Beobachtung**. Eine **Variable** inkludiert alle Werte, die für diese gemessen worden sind (also alle Beobachtungen auf dieser Variable). Eine **Beobachtung** inkludiert alle Werte, die für diese Beobachtung gemessen wurden (also alle Variablenwerte dieser *Einheit*). -- Damit Daten in R gut mit den Funktionen genutzt werden können, müssen diese in einem *tidy*-Format vorliegen (auch *long*-Format genannt). Ein Datensatz ist dann *tidy*, wenn ... -- - ... jede Variable eine Spalte ist, -- - ... jede Beobachtung eine Zeile ist, -- - ... und jede Beobachtungseinheit eine Tabelle formt. ??? Also das long-format! --- # untidy data sets (Beispiel 1) Im Folgenden bearbeiten wir zwei Datensätze, die jeweils nicht *tidy* sind. -- .center[ ```r statclass ``` ``` name stat1 stat2 r spss 1 momo 12 5 6 9 2 kim 14 10 13 15 3 sascha 7 4 4 1 ``` ] -- Dieser Datensatz ist im sogenannten *wide*-Format. D.h. wenn wir neue Prüfungen hätten, würden wir einfach weitere Spalten hinzufügen. Dies ist aber für die Verarbeitung mit R teilweise problematisch, denn wir benötigen oft ein *long*-Format. --- # untidy data sets (Beispiel 2) .center[ ```r statclass2 ``` ``` test momo kim sascha exam 1 stat1 12 13 4 exam1 2 stat1 NA NA 8 exam2 3 stat2 5 10 5 exam1 4 stat2 NA NA NA exam2 5 r 6 13 3 exam1 6 r NA NA 9 exam2 7 spss 9 4 7 exam1 8 spss NA 7 NA exam2 ``` ] -- In diesem Fall haben wir mehrere Probleme: Zum einen sind in den Spalten nicht überall Variablen, sondern Beobachtungen (`momo`, `kim`, `sascha`) und in `exam` finden wir wiederum Variablennamen. -- Fangen wir mit `statclass` an. --- # 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! ```r 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. --- # Tidy-up statclass 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. .pull-left-40[ ```r statclassTidy <- statclass %>% * pivot_longer(stat1:spss, * names_to = "course", * values_to = "grade" * ) %>% arrange(name, course ) statclassTidy ``` ] .pull-right-60[ .center[ .code60[ ``` # A tibble: 12 x 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). --- # Back to wide Möchte man dies wieder umkehren, nutzt man die Funktion `pivot_wider()`: .pull-left-40[ ```r statclassRe <- statclassTidy %>% * pivot_wider(names_from = course, * values_from = grade, * ) statclassRe ``` ] -- .pull-right-60[ .center[ ``` # A tibble: 3 x 5 name r spss stat1 stat2 <chr> <dbl> <dbl> <dbl> <dbl> 1 kim 13 15 14 10 2 momo 6 9 12 5 3 sascha 4 1 7 4 ``` ] ] --- # Tidy-up statclass2 Wo liegt hier noch ein weiteres Problem? .center[ ```r statclass2 ``` ``` test momo kim sascha exam 1 stat1 12 13 4 exam1 2 stat1 NA NA 8 exam2 3 stat2 5 10 5 exam1 4 stat2 NA NA NA exam2 5 r 6 13 3 exam1 6 r NA NA 9 exam2 7 spss 9 4 7 exam1 8 spss NA 7 NA exam2 ``` ] -- `\(\Rightarrow\)` Namenwerte sind Spaltennamen! --- # Tidy-up statclass2 Und hier die Lösung: Auch hier wandeln wir wieder in das *long*-Format um! .pull-left-40[ ```r statclass2Tidy <- statclass2 %>% * pivot_longer(momo:sascha, * names_to = "names", * values_to = "grade" ) statclass2Tidy ``` ] -- .pull-right-60[ .center[ ``` # A tibble: 24 x 4 test exam names grade <chr> <chr> <chr> <dbl> 1 stat1 exam1 momo 12 2 stat1 exam1 kim 13 3 stat1 exam1 sascha 4 4 stat1 exam2 momo NA 5 stat1 exam2 kim NA 6 stat1 exam2 sascha 8 7 stat2 exam1 momo 5 8 stat2 exam1 kim 10 9 stat2 exam1 sascha 5 10 stat2 exam2 momo NA # ... with 14 more rows ``` ] ] -- Gibt es evtl. noch mehr Probleme? -- `exam` beinhaltet keine Werte, sondern Variablennamen, nämlich `exam1` und `exam2`! Variablen, die die Note in der Prüfung angeben, deren Wert noch in `grade` steht. Deshalb nutzen wir hier jetzt `pivot_wider()`, um die Daten final *tidy* zu machen. --- # Tidy-up statclass2 .pull-left-40[ ```r statclass2Tidy <- statclass2Tidy %>% * pivot_wider(names_from = exam, * values_from = grade * ) %>% relocate(names) %>% arrange(names, test ) statclass2Tidy ``` ] -- .pull-right-60[ .center[ ``` # A tibble: 12 x 4 names test exam1 exam2 <chr> <chr> <dbl> <dbl> 1 kim r 13 NA 2 kim spss 4 7 3 kim stat1 13 NA 4 kim stat2 10 NA 5 momo r 6 NA 6 momo spss 9 NA 7 momo stat1 12 NA 8 momo stat2 5 NA 9 sascha r 3 9 10 sascha spss 7 NA 11 sascha stat1 4 8 12 sascha stat2 5 NA ``` ] ] --- # Und wieder *wider* Nur zur Übung könnte man auch dies wiederum in den Ursprungsdatensatz mit `pivot_wider()` verändern: -- .pull-left-40[ ```r statclass2re <- statclass2Tidy %>% * pivot_wider(names_from = test, * values_from = c(exam1, * exam2 ) ) statclass2re ``` ] -- .pull-right-60[ ``` # A tibble: 3 x 9 names exam1_r exam1_spss exam1_stat1 exam1_stat2 exam2_r exam2_spss exam2_stat1 exam2_stat2 <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 kim 13 4 13 10 NA 7 NA NA 2 momo 6 9 12 5 NA NA NA NA 3 sascha 3 7 4 5 9 NA 8 NA ``` ] --- class: inverse2, mline, middle, center # Daten bearbeiten mit dplyr --- # Teilen eines Datensatzes Zuerst wiederholen wir noch einmal, wie wir einen Datensatz teilen: Wir filtern die Fälle, die für unsere spätere Analyse relevant sind. Zum Beispiel wollen wir nur über Psychologie-Studierende aus Marburg forschen. Anschließend möchten wir eine neue Variable erstellen, die eine Beschreibung für die Studiendauer inkludiert (als Faktor) Welche Funktionen müssen wir anwenden? --- # Teilen eines Datensatzes ```r uniPumPsy <- uni %>% filter(city == "Marburg" & study == "Psychology") %>% mutate(term.group = factor(case_when(term <= 2 ~ "Anfänger:in", term > 2 & term <= 6 ~ "Regelstudienzeit", term > 6 ~ "Langzeit" ) ) ) head(uniPumPsy) ``` -- ``` ID mot study city distance abi term term.group 1 5 3 Psychology Marburg 43 1.0 8 Langzeit 2 9 6 Psychology Marburg 38 1.3 9 Langzeit 3 27 5 Psychology Marburg 39 1.1 8 Langzeit 4 29 1 Psychology Marburg 44 3.0 2 Anfänger:in 5 61 6 Psychology Marburg 42 4.0 4 Regelstudienzeit 6 67 7 Psychology Marburg 54 2.5 2 Anfänger:in ``` --- # Datensätze zusammenführen (Fälle hinzufügen) Im nächsten Schritt nehmen wir nun an, dass die Datenerfassung von 4 verschiedenen Personen durchgeführt wurde und es somit 4 Teildatensätze gibt, die nun zu einem vollständigen Datensatz verbunden werden sollen. Dazu nutzen wir die Funktion `bind_rows()`. In unserem Beispiel haben alle 4 Teildatensätze genau die gleiche Anzahl an Variablen, die dazu auch noch genau gleich benannt sind! Mit dem Argument `.id` erstellen wir eine Variable names `"origin"`, die die Herkunft des Falles erfasst. Dies ist automatisch nummeriert. Mit `mutate()` machen wir daraus einen Faktor, der eine bessere Beschreibung beinhaltet (*coder1*, *coder2*, *coder3*, *coder4*) .pull-left-40[ .code60[ ```r uniAll <- uni1 %>% bind_rows(list(uni2, uni3, uni4 ), .id = "origin" ) %>% mutate(origin = factor(origin, labels = c("coder1", "coder2", "coder3", "coder4" ) ) ) table(uniAll$origin) head(uniAll$origin) ``` ] ] -- .pull-right-60[ .center[ ``` coder1 coder2 coder3 coder4 250 250 250 250 ``` ``` [1] coder1 coder1 coder1 coder1 coder1 coder1 Levels: coder1 coder2 coder3 coder4 ``` ] Wir haben hier jetzt also aus vier Teildatensätzen einen gesamten Datensatz erstellt, der alle Fälle der vier Teildatensätze enthält. Wichtig, in diesem Fall waren alle Variablennamen gleich! ] --- # Datensätze zusammenführen (Fälle hinzufügen) Nun probieren wir einmal aus, was passiert, wenn es zum Beispiel in einem Teildatensatz einen Typo gibt. Zuerst erstellen wir dazu einfach zwei neue Datensätze, die jeweils nur 3 Fälle inkludieren, und unterschiedliche Variablen. -- .pull-left-40[ .code60[ ```r uniA <- uni[1:3, 4:5 ] City <- c("Giessen", "Marburg", "Marburg" ) distance <- c(21, 30, 45 ) uniB <- data.frame(City, distance ) head(uniA) head(uniB) ``` ] ] -- .pull-right-60[ .center[ ``` city distance 1 Frankfurt NA 2 Frankfurt 36 3 Marburg 56 ``` ``` City distance 1 Giessen 21 2 Marburg 30 3 Marburg 45 ``` ] ] -- Wir haben also in beiden Datensätzen die zwei Variablen, die Studienort und die Distanz zum Studienort angeben. im Datensatz `uniB` ist aber die Variable des Studienorts anders geschrieben. Probieren wir `bind_rows()` aus. --- # Datensätze zusammenführen (Fälle hinzufügen) .pull-left-40[ ```r uniTest <- uniA %>% bind_rows(uniB) #< uniTest ``` ] -- .pull-right-60[ ```r uniTest <- uniA %>% bind_rows(uniB) uniTest ``` ``` city distance City 1 Frankfurt NA <NA> 2 Frankfurt 36 <NA> 3 Marburg 56 <NA> 4 <NA> 21 Giessen 5 <NA> 30 Marburg 6 <NA> 45 Marburg ``` ] **Wo ist der Fehler?** ??? Da die Variablennamen nicht genau gleich sind, werden nun drei Variablen geschaffen: `city`, `distance` und `City`. Wo die Variable nicht vorliegt, werden automatisch `NAs` erzeugt. Dies ist vorteilhaft, kann aber auch frickelig werden, wenn bei der Datensatzerstellung nicht streng nach einem Codenamen-Schema gearbeitet wurde. **Lösung**: Im Vorfeld Variablen abklären und umbenennen. Andernfalls kann man `full_join()` nutzen. --- # Unterschiedliche Spaltennamen Wenn die Spalten verschiedene Namen haben, benötigt man das Argument `by`. Hierin werden die Kombinationen der zusammengehörigen Variablen bestimmt. In unserem Beispiel würden wir also angeben, dass aus Datensatz `uniA` die Spalte `city` gleich der Spalte `City` aus dem Datensatz `uniB` ist. Gleiches gilt für die `distance` Variable. -- .pull-left-40[ ```r uniTest2 <- uniA %>% full_join(uniB, * by = c("city" = "City", * "distance" = "distance" * ) ) head(uniTest2) ``` ] -- .pull-right-60[ .center[ ``` city distance 1 Frankfurt NA 2 Frankfurt 36 3 Marburg 56 4 Giessen 21 5 Marburg 30 6 Marburg 45 ``` ] ] ??? Dieser Ansatz ist nicht weniger aufwändig, als das Umbenennen von Spaltennamen, bietet aber dennoch eine Alternative. Mit `full_join()` kombinieren wir zwei Datensätze und können im Argument `by` angeben, welche Spalten jeweils denselben Inhalt haben. Schreibaufwand hierbei ist, dass gleiche Spaltennamen auch aufgeführt werden müssen, da ansonsten (hier im Beispiel) die Variablen `distance.x` und `distance.y` gebildet werden. Dies liegt daran, da `full_join()` eigentlich dafür gedacht ist, neue/zusätzliche Variablen hinzuzufügen. --- # Zwei Datensätze kombinieren Mögliche Anwendungsfälle: - mehrere Erhebungen - Multi-Level-Daten Für das **Mergen** von Datensätzen, kann man je nach Ausgangspunkt `left_join()` bzw. `right_join()` oder auch `full_join()` nutzen. Um die Daten korrekt zu mergen, müssen wir sowohl die Variable `city` als auch `study` nutzen, da sich die Makro-Variablen eben nach Studienort und Studienfach unterscheiden! Dies geben wir im Argument `by` an. Bei `left_join()` geben wir den Datensatz, an dem die Daten hinzugefügt werden sollen, per **Piping** weiter. Bei `right_join()` werden die Daten an den zweiten Datensatz angehängt. ??? Dies ist oft bei Mehrebenenansätzen nötig. Man hat Daten auf zwei verschiedenen Ebene und führt diese vor der Analyse in einem Datensatz zusammen, um alle Variablen aus einem Datensatz ansprechen zu können. Hierbei möchten wir Daten zu einem Datensatz hinzufügen, wobei wir eine Variable angeben, die als **Matching**-Variable dient. In diesem Beispiel haben wir im Datensatz `uniMacro` noch zusätzliche Variablen zu den jeweiligen Studienorten: Neben `city` und `study` sind hierin auch `supervision` (Betreuungsrelation) und `maxsem` (max. Seminargröße) pro Studienort und pro Studienfach eingetragen. --- # Zwei Datensätze kombinieren Wir möchten nun die Makrodaten aus `uniMacro` jeweils passend auf Studienort und Studienfach in den Mikrodatensatz hinzufügen, um anschließend ein Multi-Level-Modell zu berechnen. Hierzu nutzen wir `left_join()` und geben im Argument `by` an, dass sowohl `city` als auch `study` als **Matching**-Variablen genutzt werden sollen. -- .pull-left-40[ ```r uniMerged <- uni %>% left_join(uniMacro, * by = c("city", * "study" * ) ) uniMerged ``` ] -- .pull-right-60[ .scrollable[ ``` ID mot study city distance abi term supervision maxsem 1 1 8 Political Science Frankfurt NA 1.6 3 31 30 2 2 4 Sociology Frankfurt 36 3.0 5 38 45 3 3 2 Political Science Marburg 56 2.1 4 32 45 4 4 1 Sociology Gießen 62 3.3 5 35 30 5 5 3 Psychology Marburg 43 1.0 8 51 60 6 6 1 Political Science Marburg 43 1.1 2 32 45 7 7 7 Educational Science Marburg 39 3.8 3 46 45 8 8 0 Sociology Marburg 44 2.0 3 27 30 9 9 6 Psychology Marburg 38 1.3 9 51 60 10 10 6 Psychology Gießen 59 1.6 4 39 45 11 11 4 Psychology Gießen 69 2.4 2 39 45 12 12 2 Sociology Frankfurt 43 2.6 6 38 45 13 13 1 Educational Science Marburg 49 2.6 2 46 45 14 14 7 Political Science Marburg 44 1.0 8 32 45 15 15 8 Educational Science Marburg 39 3.7 10 46 45 16 16 8 Political Science Frankfurt 21 1.4 2 31 30 17 17 7 Educational Science Marburg 79 3.0 6 46 45 18 18 0 Sociology Frankfurt 33 3.1 5 38 45 19 19 6 Educational Science Marburg 44 2.4 5 46 45 20 20 1 Psychology Gießen 63 3.0 7 39 45 21 21 2 Educational Science Gießen 74 2.5 9 62 60 22 22 6 Educational Science Gießen 60 2.2 4 62 60 23 23 1 Sociology Frankfurt 14 1.5 9 38 45 24 24 0 Sociology Gießen 75 3.3 6 35 30 25 25 2 Sociology Gießen 56 3.8 4 35 30 26 26 4 Educational Science Marburg 50 2.8 4 46 45 27 27 5 Psychology Marburg 39 1.1 8 51 60 28 28 2 Sociology Gießen 82 2.7 9 35 30 29 29 1 Psychology Marburg 44 3.0 2 51 60 30 30 2 Sociology Marburg 41 2.4 3 27 30 31 31 6 Educational Science Gießen 63 3.8 10 62 60 32 32 6 Sociology Marburg 30 1.1 7 27 30 33 33 9 Educational Science Gießen 55 2.8 7 62 60 34 34 1 Educational Science Gießen 43 3.6 5 62 60 35 35 0 Sociology Gießen 53 3.1 5 35 30 36 36 4 Sociology Frankfurt 28 1.4 5 38 45 37 37 8 Political Science Marburg 44 2.2 10 32 45 38 38 5 Political Science Gießen 86 2.2 6 37 45 39 39 4 Political Science Gießen 56 2.3 6 37 45 40 40 5 Educational Science Gießen 58 2.3 10 62 60 41 41 7 Psychology Gießen 65 2.9 6 39 45 42 42 0 Political Science Marburg 38 2.7 9 32 45 43 43 6 Psychology Frankfurt 20 1.7 2 45 60 44 44 7 Educational Science Gießen 55 2.6 9 62 60 45 45 1 Educational Science Marburg 35 3.7 9 46 45 46 46 3 Educational Science Marburg 44 3.9 6 46 45 47 47 0 Psychology Frankfurt 25 2.7 6 45 60 48 48 2 Psychology Frankfurt NA 3.8 5 45 60 49 49 5 Sociology Marburg 43 2.6 8 27 30 50 50 7 Educational Science Frankfurt 18 2.2 9 65 60 51 51 5 Political Science Gießen 56 1.6 3 37 45 52 52 0 Educational Science Marburg 48 1.2 6 46 45 53 53 1 Political Science Marburg 57 3.4 3 32 45 54 54 2 Political Science Marburg 69 2.6 3 32 45 55 55 6 Sociology Frankfurt 22 3.2 5 38 45 56 56 6 Educational Science Frankfurt 50 1.4 6 65 60 57 57 3 Sociology Frankfurt 17 1.4 6 38 45 58 58 9 Sociology Frankfurt 39 3.7 6 38 45 59 59 0 Sociology Gießen 99 3.6 5 35 30 60 60 0 Sociology Marburg 49 3.7 2 27 30 61 61 6 Psychology Marburg 42 4.0 4 51 60 62 62 3 Psychology Frankfurt 31 1.7 4 45 60 63 63 9 Psychology Frankfurt 52 1.6 2 45 60 64 64 8 Political Science Gießen 55 2.2 10 37 45 65 65 8 Political Science Gießen 85 2.2 9 37 45 66 66 3 Political Science Marburg 66 2.4 7 32 45 67 67 7 Psychology Marburg 54 2.5 2 51 60 68 68 5 Educational Science Marburg 50 1.6 2 46 45 69 69 4 Sociology Gießen 63 2.7 6 35 30 70 70 3 Educational Science Marburg 45 2.3 10 46 45 71 71 2 Political Science Marburg 58 2.2 7 32 45 72 72 8 Psychology Marburg 74 3.4 4 51 60 73 73 8 Sociology Gießen 67 3.4 5 35 30 74 74 6 Sociology Gießen 52 2.9 3 35 30 75 75 7 Educational Science Gießen 60 1.6 8 62 60 76 76 5 Political Science Gießen 72 1.7 4 37 45 77 77 6 Psychology Frankfurt 27 1.9 10 45 60 78 78 9 Sociology Frankfurt 29 3.0 2 38 45 79 79 7 Political Science Frankfurt 29 1.8 9 31 30 80 80 6 Educational Science Frankfurt 15 2.9 4 65 60 81 81 8 Sociology Gießen 66 2.4 6 35 30 82 82 5 Political Science Frankfurt 41 1.6 6 31 30 83 83 0 Political Science Gießen 77 2.0 9 37 45 84 84 4 Sociology Gießen 75 2.2 8 35 30 85 85 5 Sociology Frankfurt 26 2.3 8 38 45 86 86 1 Psychology Marburg 48 2.3 5 51 60 87 87 9 Educational Science Gießen 54 1.0 4 62 60 88 88 0 Educational Science Gießen 68 3.9 5 62 60 89 89 7 Psychology Marburg 53 2.1 2 51 60 90 90 3 Political Science Gießen 89 2.7 3 37 45 91 91 5 Psychology Gießen 80 1.1 9 39 45 92 92 8 Sociology Frankfurt 25 1.7 7 38 45 93 93 6 Psychology Marburg 54 2.5 8 51 60 94 94 8 Political Science Marburg 36 3.7 7 32 45 95 95 3 Psychology Marburg 60 2.9 4 51 60 96 96 2 Educational Science Frankfurt 43 1.1 4 65 60 97 97 9 Educational Science Frankfurt 56 2.3 3 65 60 98 98 2 Sociology Marburg 55 2.1 4 27 30 99 99 3 Sociology Frankfurt 25 4.0 9 38 45 100 100 6 Educational Science Frankfurt 32 2.7 3 65 60 101 101 9 Sociology Frankfurt 25 3.4 9 38 45 102 102 9 Sociology Frankfurt 21 3.2 9 38 45 103 103 7 Educational Science Frankfurt 33 2.0 3 65 60 104 104 7 Political Science Frankfurt 20 1.6 2 31 30 105 105 1 Political Science Marburg 52 3.4 3 32 45 106 106 9 Political Science Frankfurt 35 1.0 7 31 30 107 107 3 Psychology Marburg 49 2.2 6 51 60 108 108 4 Educational Science Frankfurt 29 3.0 9 65 60 109 109 4 Political Science Marburg 42 2.1 6 32 45 110 110 1 Sociology Frankfurt 18 1.8 7 38 45 111 111 9 Sociology Marburg 60 3.6 6 27 30 [ reached 'max' / getOption("max.print") -- omitted 889 rows ] ``` ] ] --- # Zwei Datensätze kombinieren mit full_join() Alternativ geht dies auch mit `full_join()`: -- .pull-left-40[ ```r uniMerged2 <- uni %>% * full_join(uniMacro, * by = c("city", * "study" ) ) uniMerged2 ``` ] -- .pull-right-60[ .scrollable[ ``` ID mot study city distance abi term supervision maxsem 1 1 8 Political Science Frankfurt NA 1.6 3 31 30 2 2 4 Sociology Frankfurt 36 3.0 5 38 45 3 3 2 Political Science Marburg 56 2.1 4 32 45 4 4 1 Sociology Gießen 62 3.3 5 35 30 5 5 3 Psychology Marburg 43 1.0 8 51 60 6 6 1 Political Science Marburg 43 1.1 2 32 45 7 7 7 Educational Science Marburg 39 3.8 3 46 45 8 8 0 Sociology Marburg 44 2.0 3 27 30 9 9 6 Psychology Marburg 38 1.3 9 51 60 10 10 6 Psychology Gießen 59 1.6 4 39 45 11 11 4 Psychology Gießen 69 2.4 2 39 45 12 12 2 Sociology Frankfurt 43 2.6 6 38 45 13 13 1 Educational Science Marburg 49 2.6 2 46 45 14 14 7 Political Science Marburg 44 1.0 8 32 45 15 15 8 Educational Science Marburg 39 3.7 10 46 45 16 16 8 Political Science Frankfurt 21 1.4 2 31 30 17 17 7 Educational Science Marburg 79 3.0 6 46 45 18 18 0 Sociology Frankfurt 33 3.1 5 38 45 19 19 6 Educational Science Marburg 44 2.4 5 46 45 20 20 1 Psychology Gießen 63 3.0 7 39 45 21 21 2 Educational Science Gießen 74 2.5 9 62 60 22 22 6 Educational Science Gießen 60 2.2 4 62 60 23 23 1 Sociology Frankfurt 14 1.5 9 38 45 24 24 0 Sociology Gießen 75 3.3 6 35 30 25 25 2 Sociology Gießen 56 3.8 4 35 30 26 26 4 Educational Science Marburg 50 2.8 4 46 45 27 27 5 Psychology Marburg 39 1.1 8 51 60 28 28 2 Sociology Gießen 82 2.7 9 35 30 29 29 1 Psychology Marburg 44 3.0 2 51 60 30 30 2 Sociology Marburg 41 2.4 3 27 30 31 31 6 Educational Science Gießen 63 3.8 10 62 60 32 32 6 Sociology Marburg 30 1.1 7 27 30 33 33 9 Educational Science Gießen 55 2.8 7 62 60 34 34 1 Educational Science Gießen 43 3.6 5 62 60 35 35 0 Sociology Gießen 53 3.1 5 35 30 36 36 4 Sociology Frankfurt 28 1.4 5 38 45 37 37 8 Political Science Marburg 44 2.2 10 32 45 38 38 5 Political Science Gießen 86 2.2 6 37 45 39 39 4 Political Science Gießen 56 2.3 6 37 45 40 40 5 Educational Science Gießen 58 2.3 10 62 60 41 41 7 Psychology Gießen 65 2.9 6 39 45 42 42 0 Political Science Marburg 38 2.7 9 32 45 43 43 6 Psychology Frankfurt 20 1.7 2 45 60 44 44 7 Educational Science Gießen 55 2.6 9 62 60 45 45 1 Educational Science Marburg 35 3.7 9 46 45 46 46 3 Educational Science Marburg 44 3.9 6 46 45 47 47 0 Psychology Frankfurt 25 2.7 6 45 60 48 48 2 Psychology Frankfurt NA 3.8 5 45 60 49 49 5 Sociology Marburg 43 2.6 8 27 30 50 50 7 Educational Science Frankfurt 18 2.2 9 65 60 51 51 5 Political Science Gießen 56 1.6 3 37 45 52 52 0 Educational Science Marburg 48 1.2 6 46 45 53 53 1 Political Science Marburg 57 3.4 3 32 45 54 54 2 Political Science Marburg 69 2.6 3 32 45 55 55 6 Sociology Frankfurt 22 3.2 5 38 45 56 56 6 Educational Science Frankfurt 50 1.4 6 65 60 57 57 3 Sociology Frankfurt 17 1.4 6 38 45 58 58 9 Sociology Frankfurt 39 3.7 6 38 45 59 59 0 Sociology Gießen 99 3.6 5 35 30 60 60 0 Sociology Marburg 49 3.7 2 27 30 61 61 6 Psychology Marburg 42 4.0 4 51 60 62 62 3 Psychology Frankfurt 31 1.7 4 45 60 63 63 9 Psychology Frankfurt 52 1.6 2 45 60 64 64 8 Political Science Gießen 55 2.2 10 37 45 65 65 8 Political Science Gießen 85 2.2 9 37 45 66 66 3 Political Science Marburg 66 2.4 7 32 45 67 67 7 Psychology Marburg 54 2.5 2 51 60 68 68 5 Educational Science Marburg 50 1.6 2 46 45 69 69 4 Sociology Gießen 63 2.7 6 35 30 70 70 3 Educational Science Marburg 45 2.3 10 46 45 71 71 2 Political Science Marburg 58 2.2 7 32 45 72 72 8 Psychology Marburg 74 3.4 4 51 60 73 73 8 Sociology Gießen 67 3.4 5 35 30 74 74 6 Sociology Gießen 52 2.9 3 35 30 75 75 7 Educational Science Gießen 60 1.6 8 62 60 76 76 5 Political Science Gießen 72 1.7 4 37 45 77 77 6 Psychology Frankfurt 27 1.9 10 45 60 78 78 9 Sociology Frankfurt 29 3.0 2 38 45 79 79 7 Political Science Frankfurt 29 1.8 9 31 30 80 80 6 Educational Science Frankfurt 15 2.9 4 65 60 81 81 8 Sociology Gießen 66 2.4 6 35 30 82 82 5 Political Science Frankfurt 41 1.6 6 31 30 83 83 0 Political Science Gießen 77 2.0 9 37 45 84 84 4 Sociology Gießen 75 2.2 8 35 30 85 85 5 Sociology Frankfurt 26 2.3 8 38 45 86 86 1 Psychology Marburg 48 2.3 5 51 60 87 87 9 Educational Science Gießen 54 1.0 4 62 60 88 88 0 Educational Science Gießen 68 3.9 5 62 60 89 89 7 Psychology Marburg 53 2.1 2 51 60 90 90 3 Political Science Gießen 89 2.7 3 37 45 91 91 5 Psychology Gießen 80 1.1 9 39 45 92 92 8 Sociology Frankfurt 25 1.7 7 38 45 93 93 6 Psychology Marburg 54 2.5 8 51 60 94 94 8 Political Science Marburg 36 3.7 7 32 45 95 95 3 Psychology Marburg 60 2.9 4 51 60 96 96 2 Educational Science Frankfurt 43 1.1 4 65 60 97 97 9 Educational Science Frankfurt 56 2.3 3 65 60 98 98 2 Sociology Marburg 55 2.1 4 27 30 99 99 3 Sociology Frankfurt 25 4.0 9 38 45 100 100 6 Educational Science Frankfurt 32 2.7 3 65 60 101 101 9 Sociology Frankfurt 25 3.4 9 38 45 102 102 9 Sociology Frankfurt 21 3.2 9 38 45 103 103 7 Educational Science Frankfurt 33 2.0 3 65 60 104 104 7 Political Science Frankfurt 20 1.6 2 31 30 105 105 1 Political Science Marburg 52 3.4 3 32 45 106 106 9 Political Science Frankfurt 35 1.0 7 31 30 107 107 3 Psychology Marburg 49 2.2 6 51 60 108 108 4 Educational Science Frankfurt 29 3.0 9 65 60 109 109 4 Political Science Marburg 42 2.1 6 32 45 110 110 1 Sociology Frankfurt 18 1.8 7 38 45 111 111 9 Sociology Marburg 60 3.6 6 27 30 [ reached 'max' / getOption("max.print") -- omitted 889 rows ] ``` ] ] --- # Neue Variablen hinzufügen Will man nur weitere Variablen in einen Datensatz hinzufügen, kann man auch hierfür `full_join()` nutzen. Wir haben zum Beispiel in einem weiteren Datensatz aus dem Prüfungsverwaltungssystem vor der Anonymisierung der Daten die geleisteten Creditpoints der Befragtena ausgelesen. Diese haben wir im Datensatz `points` getrennt gespeichert und dort ebenfalls eine ID-Variable genutzt, die auf die ID-Variable des Datensatzes `uni` matcht. Wir fügen jetzt die Creditpoints dem Datensatz `uni` mit `full_join()` hinzu. Schauen wir uns zuerst nochmal die zwei Datensätze an: .pull-left-30[ .center[ .scrollable[ ```r points ``` ``` id ects 1 1 78 2 2 52 3 3 157 4 4 58 5 5 64 6 6 35 7 7 93 8 8 137 9 9 150 10 10 96 11 11 54 12 12 88 13 13 156 14 14 100 15 15 84 16 16 81 17 17 56 18 18 39 19 19 114 20 20 114 21 21 101 22 22 128 23 23 125 24 24 50 25 25 169 26 26 92 27 27 103 28 28 45 29 29 99 30 30 50 31 31 63 32 32 56 33 33 53 34 34 71 35 35 59 36 36 45 37 37 157 38 38 87 39 39 136 40 40 55 41 41 39 42 42 140 43 43 66 44 44 156 45 45 40 46 46 169 47 47 138 48 48 113 49 49 97 50 50 101 51 51 141 52 52 47 53 53 160 54 54 118 55 55 150 56 56 57 57 57 144 58 58 101 59 59 72 60 60 44 61 61 154 62 62 146 63 63 145 64 64 130 65 65 40 66 66 122 67 67 69 68 68 56 69 69 78 70 70 66 71 71 156 72 72 160 73 73 84 74 74 156 75 75 135 76 76 76 77 77 150 78 78 68 79 79 157 80 80 88 81 81 147 82 82 139 83 83 150 84 84 115 85 85 146 86 86 82 87 87 40 88 88 56 89 89 152 90 90 170 91 91 64 92 92 52 93 93 39 94 94 165 95 95 168 96 96 163 97 97 140 98 98 80 99 99 37 100 100 58 101 101 92 102 102 138 103 103 60 104 104 160 105 105 141 106 106 139 107 107 43 108 108 35 109 109 85 110 110 112 111 111 121 112 112 34 113 113 57 114 114 122 115 115 114 116 116 136 117 117 99 118 118 76 119 119 117 120 120 109 121 121 111 122 122 63 123 123 156 124 124 110 125 125 124 126 126 100 127 127 132 128 128 94 129 129 114 130 130 129 131 131 54 132 132 128 133 133 80 134 134 39 135 135 112 136 136 76 137 137 86 138 138 105 139 139 100 140 140 140 141 141 126 142 142 135 143 143 58 144 144 128 145 145 130 146 146 51 147 147 47 148 148 122 149 149 137 150 150 135 151 151 88 152 152 128 153 153 161 154 154 53 155 155 126 156 156 65 157 157 127 158 158 98 159 159 35 160 160 70 161 161 117 162 162 138 163 163 113 164 164 105 165 165 46 166 166 97 167 167 130 168 168 56 169 169 156 170 170 127 171 171 160 172 172 136 173 173 153 174 174 55 175 175 56 176 176 72 177 177 49 178 178 54 179 179 38 180 180 102 181 181 43 182 182 104 183 183 157 184 184 56 185 185 102 186 186 59 187 187 88 188 188 140 189 189 35 190 190 37 191 191 103 192 192 37 193 193 160 194 194 77 195 195 89 196 196 160 197 197 40 198 198 103 199 199 107 200 200 35 201 201 99 202 202 78 203 203 95 204 204 146 205 205 83 206 206 71 207 207 129 208 208 67 209 209 97 210 210 48 211 211 95 212 212 138 213 213 150 214 214 141 215 215 135 216 216 151 217 217 63 218 218 145 219 219 69 220 220 40 221 221 80 222 222 101 223 223 130 224 224 116 225 225 138 226 226 122 227 227 168 228 228 115 229 229 93 230 230 64 231 231 151 232 232 100 233 233 147 234 234 87 235 235 61 236 236 71 237 237 159 238 238 54 239 239 51 240 240 84 241 241 37 242 242 80 243 243 37 244 244 60 245 245 99 246 246 149 247 247 148 248 248 153 249 249 96 250 250 137 251 251 73 252 252 162 253 253 119 254 254 64 255 255 102 256 256 59 257 257 83 258 258 87 259 259 116 260 260 146 261 261 165 262 262 92 263 263 118 264 264 138 265 265 127 266 266 56 267 267 170 268 268 136 269 269 105 270 270 158 271 271 97 272 272 115 273 273 107 274 274 148 275 275 77 276 276 146 277 277 55 278 278 56 279 279 68 280 280 94 281 281 120 282 282 140 283 283 69 284 284 99 285 285 145 286 286 129 287 287 130 288 288 57 289 289 121 290 290 141 291 291 76 292 292 151 293 293 109 294 294 77 295 295 58 296 296 85 297 297 90 298 298 88 299 299 95 300 300 122 301 301 41 302 302 160 303 303 64 304 304 51 305 305 62 306 306 148 307 307 83 308 308 46 309 309 67 310 310 69 311 311 112 312 312 91 313 313 152 314 314 151 315 315 144 316 316 94 317 317 38 318 318 116 319 319 119 320 320 167 321 321 100 322 322 104 323 323 142 324 324 98 325 325 145 326 326 103 327 327 93 328 328 136 329 329 132 330 330 127 331 331 68 332 332 140 333 333 160 334 334 129 335 335 146 336 336 103 337 337 64 338 338 160 339 339 125 340 340 124 341 341 78 342 342 146 343 343 42 344 344 56 345 345 135 346 346 137 347 347 39 348 348 77 349 349 107 350 350 84 351 351 48 352 352 137 353 353 138 354 354 111 355 355 127 356 356 83 357 357 75 358 358 62 359 359 140 360 360 106 361 361 138 362 362 102 363 363 61 364 364 110 365 365 123 366 366 61 367 367 117 368 368 73 369 369 39 370 370 67 371 371 56 372 372 70 373 373 63 374 374 49 375 375 44 376 376 155 377 377 68 378 378 48 379 379 161 380 380 89 381 381 89 382 382 48 383 383 111 384 384 72 385 385 65 386 386 56 387 387 59 388 388 61 389 389 166 390 390 81 391 391 109 392 392 134 393 393 167 394 394 37 395 395 60 396 396 164 397 397 79 398 398 74 399 399 65 400 400 167 401 401 134 402 402 105 403 403 163 404 404 112 405 405 68 406 406 101 407 407 100 408 408 84 409 409 135 410 410 42 411 411 53 412 412 147 413 413 147 414 414 167 415 415 117 416 416 93 417 417 108 418 418 168 419 419 126 420 420 99 421 421 122 422 422 125 423 423 55 424 424 98 425 425 89 426 426 52 427 427 129 428 428 109 429 429 67 430 430 65 431 431 149 432 432 127 433 433 59 434 434 70 435 435 84 436 436 109 437 437 78 438 438 55 439 439 131 440 440 144 441 441 83 442 442 126 443 443 162 444 444 166 445 445 36 446 446 104 447 447 43 448 448 102 449 449 161 450 450 91 451 451 56 452 452 86 453 453 141 454 454 79 455 455 100 456 456 150 457 457 126 458 458 128 459 459 126 460 460 111 461 461 142 462 462 74 463 463 160 464 464 72 465 465 159 466 466 114 467 467 133 468 468 130 469 469 155 470 470 128 471 471 87 472 472 85 473 473 36 474 474 92 475 475 135 476 476 139 477 477 66 478 478 139 479 479 95 480 480 164 481 481 73 482 482 67 483 483 98 484 484 51 485 485 143 486 486 168 487 487 91 488 488 168 489 489 71 490 490 117 491 491 116 492 492 77 493 493 113 494 494 37 495 495 62 496 496 86 497 497 169 498 498 54 499 499 111 500 500 98 [ reached 'max' / getOption("max.print") -- omitted 500 rows ] ``` ] ] ] .pull-right-70[ .center[ .scrollable[ ```r uni ``` ``` ID mot study city distance abi term 1 1 8 Political Science Frankfurt NA 1.6 3 2 2 4 Sociology Frankfurt 36 3.0 5 3 3 2 Political Science Marburg 56 2.1 4 4 4 1 Sociology Gießen 62 3.3 5 5 5 3 Psychology Marburg 43 1.0 8 6 6 1 Political Science Marburg 43 1.1 2 7 7 7 Educational Science Marburg 39 3.8 3 8 8 0 Sociology Marburg 44 2.0 3 9 9 6 Psychology Marburg 38 1.3 9 10 10 6 Psychology Gießen 59 1.6 4 11 11 4 Psychology Gießen 69 2.4 2 12 12 2 Sociology Frankfurt 43 2.6 6 13 13 1 Educational Science Marburg 49 2.6 2 14 14 7 Political Science Marburg 44 1.0 8 15 15 8 Educational Science Marburg 39 3.7 10 16 16 8 Political Science Frankfurt 21 1.4 2 17 17 7 Educational Science Marburg 79 3.0 6 18 18 0 Sociology Frankfurt 33 3.1 5 19 19 6 Educational Science Marburg 44 2.4 5 20 20 1 Psychology Gießen 63 3.0 7 21 21 2 Educational Science Gießen 74 2.5 9 22 22 6 Educational Science Gießen 60 2.2 4 23 23 1 Sociology Frankfurt 14 1.5 9 24 24 0 Sociology Gießen 75 3.3 6 25 25 2 Sociology Gießen 56 3.8 4 26 26 4 Educational Science Marburg 50 2.8 4 27 27 5 Psychology Marburg 39 1.1 8 28 28 2 Sociology Gießen 82 2.7 9 29 29 1 Psychology Marburg 44 3.0 2 30 30 2 Sociology Marburg 41 2.4 3 31 31 6 Educational Science Gießen 63 3.8 10 32 32 6 Sociology Marburg 30 1.1 7 33 33 9 Educational Science Gießen 55 2.8 7 34 34 1 Educational Science Gießen 43 3.6 5 35 35 0 Sociology Gießen 53 3.1 5 36 36 4 Sociology Frankfurt 28 1.4 5 37 37 8 Political Science Marburg 44 2.2 10 38 38 5 Political Science Gießen 86 2.2 6 39 39 4 Political Science Gießen 56 2.3 6 40 40 5 Educational Science Gießen 58 2.3 10 41 41 7 Psychology Gießen 65 2.9 6 42 42 0 Political Science Marburg 38 2.7 9 43 43 6 Psychology Frankfurt 20 1.7 2 44 44 7 Educational Science Gießen 55 2.6 9 45 45 1 Educational Science Marburg 35 3.7 9 46 46 3 Educational Science Marburg 44 3.9 6 47 47 0 Psychology Frankfurt 25 2.7 6 48 48 2 Psychology Frankfurt NA 3.8 5 49 49 5 Sociology Marburg 43 2.6 8 50 50 7 Educational Science Frankfurt 18 2.2 9 51 51 5 Political Science Gießen 56 1.6 3 52 52 0 Educational Science Marburg 48 1.2 6 53 53 1 Political Science Marburg 57 3.4 3 54 54 2 Political Science Marburg 69 2.6 3 55 55 6 Sociology Frankfurt 22 3.2 5 56 56 6 Educational Science Frankfurt 50 1.4 6 57 57 3 Sociology Frankfurt 17 1.4 6 58 58 9 Sociology Frankfurt 39 3.7 6 59 59 0 Sociology Gießen 99 3.6 5 60 60 0 Sociology Marburg 49 3.7 2 61 61 6 Psychology Marburg 42 4.0 4 62 62 3 Psychology Frankfurt 31 1.7 4 63 63 9 Psychology Frankfurt 52 1.6 2 64 64 8 Political Science Gießen 55 2.2 10 65 65 8 Political Science Gießen 85 2.2 9 66 66 3 Political Science Marburg 66 2.4 7 67 67 7 Psychology Marburg 54 2.5 2 68 68 5 Educational Science Marburg 50 1.6 2 69 69 4 Sociology Gießen 63 2.7 6 70 70 3 Educational Science Marburg 45 2.3 10 71 71 2 Political Science Marburg 58 2.2 7 72 72 8 Psychology Marburg 74 3.4 4 73 73 8 Sociology Gießen 67 3.4 5 74 74 6 Sociology Gießen 52 2.9 3 75 75 7 Educational Science Gießen 60 1.6 8 76 76 5 Political Science Gießen 72 1.7 4 77 77 6 Psychology Frankfurt 27 1.9 10 78 78 9 Sociology Frankfurt 29 3.0 2 79 79 7 Political Science Frankfurt 29 1.8 9 80 80 6 Educational Science Frankfurt 15 2.9 4 81 81 8 Sociology Gießen 66 2.4 6 82 82 5 Political Science Frankfurt 41 1.6 6 83 83 0 Political Science Gießen 77 2.0 9 84 84 4 Sociology Gießen 75 2.2 8 85 85 5 Sociology Frankfurt 26 2.3 8 86 86 1 Psychology Marburg 48 2.3 5 87 87 9 Educational Science Gießen 54 1.0 4 88 88 0 Educational Science Gießen 68 3.9 5 89 89 7 Psychology Marburg 53 2.1 2 90 90 3 Political Science Gießen 89 2.7 3 91 91 5 Psychology Gießen 80 1.1 9 92 92 8 Sociology Frankfurt 25 1.7 7 93 93 6 Psychology Marburg 54 2.5 8 94 94 8 Political Science Marburg 36 3.7 7 95 95 3 Psychology Marburg 60 2.9 4 96 96 2 Educational Science Frankfurt 43 1.1 4 97 97 9 Educational Science Frankfurt 56 2.3 3 98 98 2 Sociology Marburg 55 2.1 4 99 99 3 Sociology Frankfurt 25 4.0 9 100 100 6 Educational Science Frankfurt 32 2.7 3 101 101 9 Sociology Frankfurt 25 3.4 9 102 102 9 Sociology Frankfurt 21 3.2 9 103 103 7 Educational Science Frankfurt 33 2.0 3 104 104 7 Political Science Frankfurt 20 1.6 2 105 105 1 Political Science Marburg 52 3.4 3 106 106 9 Political Science Frankfurt 35 1.0 7 107 107 3 Psychology Marburg 49 2.2 6 108 108 4 Educational Science Frankfurt 29 3.0 9 109 109 4 Political Science Marburg 42 2.1 6 110 110 1 Sociology Frankfurt 18 1.8 7 111 111 9 Sociology Marburg 60 3.6 6 112 112 5 Psychology Marburg 50 2.4 9 113 113 4 Political Science Marburg 60 3.9 2 114 114 2 Educational Science Marburg 35 3.6 2 115 115 7 Political Science Frankfurt 33 1.3 5 116 116 3 Sociology Marburg 58 1.9 5 117 117 1 Educational Science Gießen 68 2.7 7 118 118 9 Sociology Marburg 48 2.1 2 119 119 2 Sociology Gießen 59 3.1 5 120 120 4 Sociology Marburg 74 2.9 5 121 121 7 Educational Science Marburg 59 3.8 7 122 122 1 Educational Science Frankfurt 53 1.7 7 123 123 4 Political Science Gießen 70 3.3 3 124 124 4 Educational Science Gießen 61 3.1 4 125 125 3 Educational Science Gießen 51 3.4 4 126 126 6 Sociology Marburg 42 4.0 5 127 127 9 Psychology Frankfurt 34 2.9 7 128 128 3 Psychology Gießen 81 2.1 7 129 129 4 Educational Science Marburg 53 1.4 3 130 130 8 Educational Science Marburg 36 3.8 8 131 131 4 Educational Science Marburg 58 2.5 3 132 132 4 Sociology Gießen 49 1.2 9 133 133 8 Educational Science Marburg 45 1.9 5 134 134 6 Psychology Frankfurt 27 3.0 3 135 135 8 Educational Science Gießen 45 1.3 7 136 136 8 Psychology Gießen 80 3.1 10 137 137 0 Educational Science Frankfurt 24 2.2 4 138 138 0 Psychology Gießen 65 1.7 3 139 139 3 Sociology Marburg 66 2.9 6 140 140 2 Sociology Frankfurt 39 3.0 7 141 141 4 Educational Science Gießen 67 3.9 3 142 142 8 Educational Science Marburg 56 1.7 6 [ reached 'max' / getOption("max.print") -- omitted 858 rows ] ``` ] ] ] -- Wir haben zwar in beiden Variablen eine ID-Variable, allerdings ist die Spalte unterschiedlich benannt. --- # Neue Variablen hinzufügen Wir können jetzt - wie zuvor oben - wieder im `by`-Argument dies angeben. Diesmal wollen wir einfach schnell vorher den Spaltennamen in einem der Datensätze anpassen. Dazu nutzen wir einfach `rename()`. Die Logik in der Funktion ist `neuer Name = alter Name`. Dann sind die Spaltennamen gleich und wir können die Datensätze mergen. .pull-left-40[ ```r points <- points %>% * rename(ID = id) uni <- uni %>% * full_join(points, * by = "ID" * ) uni ``` ] -- .pull-right-60[ .center[ .scrollable[ ``` ID mot study city distance abi term ects 1 1 8 Political Science Frankfurt NA 1.6 3 78 2 2 4 Sociology Frankfurt 36 3.0 5 52 3 3 2 Political Science Marburg 56 2.1 4 157 4 4 1 Sociology Gießen 62 3.3 5 58 5 5 3 Psychology Marburg 43 1.0 8 64 6 6 1 Political Science Marburg 43 1.1 2 35 7 7 7 Educational Science Marburg 39 3.8 3 93 8 8 0 Sociology Marburg 44 2.0 3 137 9 9 6 Psychology Marburg 38 1.3 9 150 10 10 6 Psychology Gießen 59 1.6 4 96 11 11 4 Psychology Gießen 69 2.4 2 54 12 12 2 Sociology Frankfurt 43 2.6 6 88 13 13 1 Educational Science Marburg 49 2.6 2 156 14 14 7 Political Science Marburg 44 1.0 8 100 15 15 8 Educational Science Marburg 39 3.7 10 84 16 16 8 Political Science Frankfurt 21 1.4 2 81 17 17 7 Educational Science Marburg 79 3.0 6 56 18 18 0 Sociology Frankfurt 33 3.1 5 39 19 19 6 Educational Science Marburg 44 2.4 5 114 20 20 1 Psychology Gießen 63 3.0 7 114 21 21 2 Educational Science Gießen 74 2.5 9 101 22 22 6 Educational Science Gießen 60 2.2 4 128 23 23 1 Sociology Frankfurt 14 1.5 9 125 24 24 0 Sociology Gießen 75 3.3 6 50 25 25 2 Sociology Gießen 56 3.8 4 169 26 26 4 Educational Science Marburg 50 2.8 4 92 27 27 5 Psychology Marburg 39 1.1 8 103 28 28 2 Sociology Gießen 82 2.7 9 45 29 29 1 Psychology Marburg 44 3.0 2 99 30 30 2 Sociology Marburg 41 2.4 3 50 31 31 6 Educational Science Gießen 63 3.8 10 63 32 32 6 Sociology Marburg 30 1.1 7 56 33 33 9 Educational Science Gießen 55 2.8 7 53 34 34 1 Educational Science Gießen 43 3.6 5 71 35 35 0 Sociology Gießen 53 3.1 5 59 36 36 4 Sociology Frankfurt 28 1.4 5 45 37 37 8 Political Science Marburg 44 2.2 10 157 38 38 5 Political Science Gießen 86 2.2 6 87 39 39 4 Political Science Gießen 56 2.3 6 136 40 40 5 Educational Science Gießen 58 2.3 10 55 41 41 7 Psychology Gießen 65 2.9 6 39 42 42 0 Political Science Marburg 38 2.7 9 140 43 43 6 Psychology Frankfurt 20 1.7 2 66 44 44 7 Educational Science Gießen 55 2.6 9 156 45 45 1 Educational Science Marburg 35 3.7 9 40 46 46 3 Educational Science Marburg 44 3.9 6 169 47 47 0 Psychology Frankfurt 25 2.7 6 138 48 48 2 Psychology Frankfurt NA 3.8 5 113 49 49 5 Sociology Marburg 43 2.6 8 97 50 50 7 Educational Science Frankfurt 18 2.2 9 101 51 51 5 Political Science Gießen 56 1.6 3 141 52 52 0 Educational Science Marburg 48 1.2 6 47 53 53 1 Political Science Marburg 57 3.4 3 160 54 54 2 Political Science Marburg 69 2.6 3 118 55 55 6 Sociology Frankfurt 22 3.2 5 150 56 56 6 Educational Science Frankfurt 50 1.4 6 57 57 57 3 Sociology Frankfurt 17 1.4 6 144 58 58 9 Sociology Frankfurt 39 3.7 6 101 59 59 0 Sociology Gießen 99 3.6 5 72 60 60 0 Sociology Marburg 49 3.7 2 44 61 61 6 Psychology Marburg 42 4.0 4 154 62 62 3 Psychology Frankfurt 31 1.7 4 146 63 63 9 Psychology Frankfurt 52 1.6 2 145 64 64 8 Political Science Gießen 55 2.2 10 130 65 65 8 Political Science Gießen 85 2.2 9 40 66 66 3 Political Science Marburg 66 2.4 7 122 67 67 7 Psychology Marburg 54 2.5 2 69 68 68 5 Educational Science Marburg 50 1.6 2 56 69 69 4 Sociology Gießen 63 2.7 6 78 70 70 3 Educational Science Marburg 45 2.3 10 66 71 71 2 Political Science Marburg 58 2.2 7 156 72 72 8 Psychology Marburg 74 3.4 4 160 73 73 8 Sociology Gießen 67 3.4 5 84 74 74 6 Sociology Gießen 52 2.9 3 156 75 75 7 Educational Science Gießen 60 1.6 8 135 76 76 5 Political Science Gießen 72 1.7 4 76 77 77 6 Psychology Frankfurt 27 1.9 10 150 78 78 9 Sociology Frankfurt 29 3.0 2 68 79 79 7 Political Science Frankfurt 29 1.8 9 157 80 80 6 Educational Science Frankfurt 15 2.9 4 88 81 81 8 Sociology Gießen 66 2.4 6 147 82 82 5 Political Science Frankfurt 41 1.6 6 139 83 83 0 Political Science Gießen 77 2.0 9 150 84 84 4 Sociology Gießen 75 2.2 8 115 85 85 5 Sociology Frankfurt 26 2.3 8 146 86 86 1 Psychology Marburg 48 2.3 5 82 87 87 9 Educational Science Gießen 54 1.0 4 40 88 88 0 Educational Science Gießen 68 3.9 5 56 89 89 7 Psychology Marburg 53 2.1 2 152 90 90 3 Political Science Gießen 89 2.7 3 170 91 91 5 Psychology Gießen 80 1.1 9 64 92 92 8 Sociology Frankfurt 25 1.7 7 52 93 93 6 Psychology Marburg 54 2.5 8 39 94 94 8 Political Science Marburg 36 3.7 7 165 95 95 3 Psychology Marburg 60 2.9 4 168 96 96 2 Educational Science Frankfurt 43 1.1 4 163 97 97 9 Educational Science Frankfurt 56 2.3 3 140 98 98 2 Sociology Marburg 55 2.1 4 80 99 99 3 Sociology Frankfurt 25 4.0 9 37 100 100 6 Educational Science Frankfurt 32 2.7 3 58 101 101 9 Sociology Frankfurt 25 3.4 9 92 102 102 9 Sociology Frankfurt 21 3.2 9 138 103 103 7 Educational Science Frankfurt 33 2.0 3 60 104 104 7 Political Science Frankfurt 20 1.6 2 160 105 105 1 Political Science Marburg 52 3.4 3 141 106 106 9 Political Science Frankfurt 35 1.0 7 139 107 107 3 Psychology Marburg 49 2.2 6 43 108 108 4 Educational Science Frankfurt 29 3.0 9 35 109 109 4 Political Science Marburg 42 2.1 6 85 110 110 1 Sociology Frankfurt 18 1.8 7 112 111 111 9 Sociology Marburg 60 3.6 6 121 112 112 5 Psychology Marburg 50 2.4 9 34 113 113 4 Political Science Marburg 60 3.9 2 57 114 114 2 Educational Science Marburg 35 3.6 2 122 115 115 7 Political Science Frankfurt 33 1.3 5 114 116 116 3 Sociology Marburg 58 1.9 5 136 117 117 1 Educational Science Gießen 68 2.7 7 99 118 118 9 Sociology Marburg 48 2.1 2 76 119 119 2 Sociology Gießen 59 3.1 5 117 120 120 4 Sociology Marburg 74 2.9 5 109 121 121 7 Educational Science Marburg 59 3.8 7 111 122 122 1 Educational Science Frankfurt 53 1.7 7 63 123 123 4 Political Science Gießen 70 3.3 3 156 124 124 4 Educational Science Gießen 61 3.1 4 110 125 125 3 Educational Science Gießen 51 3.4 4 124 [ reached 'max' / getOption("max.print") -- omitted 875 rows ] ``` ] ] ] --- class: inverse2, center, middle, mline # Das war's! Nun machen wir ein kleines Quiz!