class: center, title-slide, middle # Einführung in dplyr-Grammatik ## 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) ] --- # Starten wir jetzt! Nun tauchen wir in die Welt von **dplyr** ein. Das Paket nutzt man oft, um Datenstrukturen zu erkunden oder Transformationen vorzunehmen. Dabei gibt es einen Grundstock an Vokabeln, die über **piping** miteinander verbunden werden. Dazu installieren wir zuerst **tidyverse**: -- ```r install.packages("tidyverse") library("tidyverse") # alternativ: # install.packages("dplyr") # library("dplyr") ``` --- # Datensatz laden Anschließend laden wir den Datensatz `uni` ins *environment*. -- ```r uni <- readRDS("../datasets/uni.rds") # oder eigener Pfad, wenn nicht in der Cloud ``` -- Wir verschaffen uns einen Überblick über den Datensatz: -- ```r head(uni, n = 10 ) ``` --- # Datensatz im Überblick ``` 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 ``` Einen Überblick über die Variablen: -- ```r # ID: laufende Nummer # mot: Studienmotivation (0 <sehr niedrig> - 10 <sehr hoch>) # study: Studienfach (1 <Political Science>, 2 <Sociology>, 3 <Educational Science>, 4 <Psychology>) # city: Studienort (1 <Gießen>, 2 <Marburg>, 3 <Frankfurt>) # distance: Anfahrtsdauer zur Uni in Minuten # abi: Abiturnote # term: Fachsemester ``` --- # Grundvokabeln in dplyr In `dplyr` gibt es nicht viele Vokabeln, die aber effektiv miteinander verbunden werden können, um Daten zu sortieren bzw. zu manipulieren. -- Die Grundvokabeln lernen wir jetzt im Folgenden erstmal ohne *piping* kennen: - `select()` - `slice()` - `filter()` - `arrange()` - `mutate()` - `summarise()` / `summarize()` - `group_by()` --- # select() Mit **select()** wählen wir Spalten aus, die uns angezeigt werden ```r select(uni, * c(mot, * term ) ) ```
--- # slice() Demgegenüber können wir mit **slice()** Zeilen auswählen, also Fälle: ```r slice(uni, * 50:55 ) ``` ``` ID mot study city distance abi term 1 50 7 Educational Science Frankfurt 18 2.2 9 2 51 5 Political Science Gießen 56 1.6 3 3 52 0 Educational Science Marburg 48 1.2 6 4 53 1 Political Science Marburg 57 3.4 3 5 54 2 Political Science Marburg 69 2.6 3 6 55 6 Sociology Frankfurt 22 3.2 5 ``` --- # filter() Mit `filter()` können wir spezifische Fälle des Datensatzes auswählen. Zur Erinnerung die logischen Verknüpfungen in R: -- - logisches und: `&` - logisches oder: `|` - logisches gleich: `==` - logisches ungleich: `!=` - logisches größer: `>` - logisches kleiner: `<` - logisches kleiner gleich: `<=` - logisches größer gleich: `>=` --- # filter() Zur Anwendung: .pull-left-40[ ```r filter(uni, * city == "Giessen" ) ``` ] -- .pull-right-60[ .scrollable[ ``` [1] ID mot study city distance abi term <0 Zeilen> (oder row.names mit Länge 0) ``` ] ] --- # arrange() .pull-left-40[ Mit **arrange()** können wir den Datensatz sortieren. ```r arrange(uni, * abi ) ``` ] -- .pull-right-60[ .scrollable[ ``` ID mot study city distance abi term 1 5 3 Psychology Marburg 43 1.0 8 2 14 7 Political Science Marburg 44 1.0 8 3 87 9 Educational Science Gießen 54 1.0 4 4 106 9 Political Science Frankfurt 35 1.0 7 5 238 1 Political Science Marburg 51 1.0 6 6 271 1 Psychology Gießen 80 1.0 8 7 274 6 Political Science Marburg 59 1.0 9 8 300 6 Political Science Marburg 48 1.0 3 9 348 1 Educational Science Frankfurt NA 1.0 6 10 394 3 Political Science Marburg 55 1.0 5 11 398 1 Political Science Frankfurt 16 1.0 2 12 417 1 Sociology Gießen 70 1.0 3 13 446 2 Sociology Gießen 72 1.0 4 14 447 6 Psychology Gießen 93 1.0 10 15 577 8 Psychology Frankfurt 19 1.0 4 16 641 1 Educational Science Marburg 44 1.0 4 17 703 0 Psychology Gießen 62 1.0 10 18 811 1 Educational Science Gießen 59 1.0 4 19 812 3 Educational Science Gießen 97 1.0 5 20 817 0 Sociology Gießen 58 1.0 9 21 826 5 Psychology Marburg 37 1.0 2 22 840 3 Sociology Marburg 45 1.0 4 23 857 6 Psychology Gießen 73 1.0 6 24 879 3 Psychology Marburg 38 1.0 10 25 918 0 Sociology Marburg 43 1.0 10 26 934 9 Psychology Gießen 54 1.0 9 27 994 3 Psychology Gießen 75 1.0 3 28 6 1 Political Science Marburg 43 1.1 2 29 27 5 Psychology Marburg 39 1.1 8 30 32 6 Sociology Marburg 30 1.1 7 31 91 5 Psychology Gießen 80 1.1 9 32 96 2 Educational Science Frankfurt 43 1.1 4 33 172 7 Sociology Frankfurt 48 1.1 8 34 200 4 Educational Science Marburg 52 1.1 3 35 214 2 Educational Science Marburg 48 1.1 6 36 228 6 Political Science Gießen 65 1.1 8 37 240 9 Sociology Marburg 37 1.1 3 38 263 7 Psychology Frankfurt 23 1.1 2 39 375 2 Psychology Marburg 42 1.1 2 40 386 8 Sociology Frankfurt NA 1.1 8 41 431 1 Sociology Marburg 41 1.1 2 42 433 0 Sociology Gießen 88 1.1 10 43 463 7 Psychology Marburg 37 1.1 2 44 519 3 Educational Science Gießen 67 1.1 3 45 534 7 Educational Science Gießen 65 1.1 4 46 557 9 Sociology Marburg 57 1.1 4 47 582 9 Sociology Marburg 56 1.1 4 48 587 7 Psychology Marburg 45 1.1 9 49 624 3 Psychology Frankfurt 21 1.1 10 50 696 7 Psychology Gießen 78 1.1 6 51 836 5 Psychology Gießen 62 1.1 6 52 925 3 Educational Science Frankfurt 39 1.1 9 53 941 9 Sociology Gießen 55 1.1 6 54 998 4 Political Science Frankfurt 17 1.1 5 55 52 0 Educational Science Marburg 48 1.2 6 56 132 4 Sociology Gießen 49 1.2 9 57 146 3 Psychology Marburg 56 1.2 5 58 252 6 Political Science Frankfurt 18 1.2 9 59 306 2 Psychology Gießen 63 1.2 5 60 377 2 Psychology Gießen 65 1.2 7 61 379 5 Psychology Marburg 18 1.2 2 62 404 8 Political Science Marburg 67 1.2 9 63 413 5 Political Science Gießen 62 1.2 5 64 460 8 Sociology Marburg 53 1.2 9 65 482 9 Sociology Marburg 53 1.2 10 66 516 5 Educational Science Frankfurt 36 1.2 6 67 531 9 Psychology Marburg 69 1.2 3 68 537 4 Psychology Frankfurt 35 1.2 4 69 561 4 Sociology Marburg 51 1.2 6 70 692 4 Educational Science Gießen 70 1.2 9 71 713 6 Psychology Gießen 54 1.2 2 72 719 6 Political Science Marburg 42 1.2 10 73 773 1 Educational Science Marburg 48 1.2 10 74 776 3 Educational Science Gießen 66 1.2 9 75 794 8 Educational Science Marburg 64 1.2 10 76 901 4 Political Science Frankfurt 38 1.2 10 77 957 4 Political Science Frankfurt 30 1.2 5 78 985 3 Sociology Marburg 52 1.2 9 79 9 6 Psychology Marburg 38 1.3 9 80 115 7 Political Science Frankfurt 33 1.3 5 81 135 8 Educational Science Gießen 45 1.3 7 82 144 0 Political Science Marburg 70 1.3 4 83 177 3 Political Science Gießen 68 1.3 3 84 208 6 Educational Science Marburg 55 1.3 6 85 212 3 Political Science Frankfurt 26 1.3 5 86 354 2 Sociology Frankfurt 54 1.3 8 87 382 3 Educational Science Marburg 60 1.3 7 88 415 7 Political Science Marburg 43 1.3 2 89 427 9 Sociology Gießen 77 1.3 2 90 429 7 Psychology Frankfurt NA 1.3 4 91 489 3 Educational Science Gießen 52 1.3 10 92 520 4 Sociology Marburg 65 1.3 5 93 570 4 Political Science Gießen 72 1.3 7 94 664 9 Psychology Marburg 36 1.3 8 95 698 2 Psychology Frankfurt 37 1.3 4 96 715 8 Psychology Gießen 68 1.3 4 97 747 3 Political Science Gießen 79 1.3 6 98 760 6 Psychology Marburg 41 1.3 3 99 780 6 Sociology Marburg 31 1.3 4 100 804 8 Political Science Marburg 37 1.3 10 101 827 6 Educational Science Gießen 68 1.3 5 102 842 9 Educational Science Frankfurt 28 1.3 5 103 910 8 Political Science Gießen 77 1.3 2 104 915 9 Educational Science Marburg 29 1.3 4 105 16 8 Political Science Frankfurt 21 1.4 2 106 36 4 Sociology Frankfurt 28 1.4 5 107 56 6 Educational Science Frankfurt 50 1.4 6 108 57 3 Sociology Frankfurt 17 1.4 6 109 129 4 Educational Science Marburg 53 1.4 3 110 149 3 Sociology Marburg 51 1.4 4 111 169 5 Political Science Frankfurt 32 1.4 6 112 241 6 Sociology Marburg 58 1.4 9 113 250 1 Psychology Marburg 55 1.4 8 114 267 3 Educational Science Frankfurt 39 1.4 6 115 287 5 Educational Science Marburg 51 1.4 10 116 317 9 Educational Science Frankfurt 23 1.4 10 117 333 5 Educational Science Marburg 36 1.4 9 118 343 1 Political Science Frankfurt 45 1.4 4 119 347 7 Educational Science Frankfurt 25 1.4 5 120 371 6 Political Science Gießen 68 1.4 10 121 425 2 Political Science Marburg 51 1.4 9 122 436 9 Political Science Gießen 53 1.4 3 123 467 1 Educational Science Marburg 46 1.4 10 124 476 4 Educational Science Marburg 63 1.4 8 125 611 1 Educational Science Marburg 51 1.4 7 126 623 8 Sociology Marburg 70 1.4 7 127 656 5 Political Science Gießen 67 1.4 3 128 674 3 Political Science Marburg 46 1.4 3 129 736 0 Political Science Gießen 70 1.4 5 130 746 9 Political Science Gießen 70 1.4 2 131 771 5 Political Science Frankfurt 44 1.4 8 132 815 0 Psychology Frankfurt 30 1.4 3 133 843 1 Sociology Gießen 52 1.4 3 134 928 8 Sociology Marburg 48 1.4 6 135 23 1 Sociology Frankfurt 14 1.5 9 136 157 8 Political Science Frankfurt 26 1.5 7 137 167 5 Educational Science Marburg 67 1.5 2 138 180 6 Political Science Gießen 80 1.5 3 139 209 3 Sociology Marburg 45 1.5 2 140 229 8 Psychology Gießen 65 1.5 10 141 255 4 Educational Science Frankfurt 17 1.5 7 142 290 3 Psychology Marburg 29 1.5 6 [ reached 'max' / getOption("max.print") -- omitted 858 rows ] ``` ] ] --- # arrange() .pull-left-40[ Die Sortierung ist dabei immer aufsteigend. Dies kann man über die Funktion ```desc()``` ändert (**desc**ending): ```r arrange(uni, * desc(abi) ) ``` ] -- .pull-right-60[ .scrollable[ ``` ID mot study city distance abi term 1 61 6 Psychology Marburg 42 4.0 4 2 99 3 Sociology Frankfurt 25 4.0 9 3 126 6 Sociology Marburg 42 4.0 5 4 148 5 Educational Science Gießen 64 4.0 9 5 154 8 Psychology Marburg 47 4.0 4 6 156 7 Psychology Frankfurt 21 4.0 9 7 181 8 Sociology Frankfurt 36 4.0 8 8 189 1 Psychology Frankfurt NA 4.0 2 9 232 2 Sociology Gießen 72 4.0 9 10 256 3 Psychology Frankfurt 34 4.0 4 11 268 7 Political Science Marburg 46 4.0 8 12 289 1 Sociology Gießen 71 4.0 7 13 310 0 Psychology Frankfurt 26 4.0 9 14 387 3 Psychology Gießen 71 4.0 4 15 558 8 Psychology Gießen 60 4.0 5 16 593 0 Educational Science Marburg 44 4.0 2 17 594 9 Political Science Gießen 65 4.0 7 18 632 4 Sociology Frankfurt 14 4.0 6 19 643 5 Educational Science Gießen 55 4.0 8 20 680 9 Educational Science Marburg 61 4.0 4 21 717 5 Political Science Frankfurt 51 4.0 3 22 735 9 Psychology Gießen 65 4.0 5 23 757 7 Psychology Marburg 37 4.0 7 24 781 9 Psychology Gießen 74 4.0 9 25 809 3 Educational Science Frankfurt 39 4.0 9 26 824 7 Psychology Gießen 67 4.0 6 27 865 6 Political Science Frankfurt 30 4.0 6 28 898 3 Sociology Frankfurt NA 4.0 9 29 905 9 Psychology Frankfurt 31 4.0 4 30 909 3 Sociology Gießen 55 4.0 9 31 953 7 Psychology Frankfurt 38 4.0 4 32 986 1 Sociology Gießen 80 4.0 3 33 46 3 Educational Science Marburg 44 3.9 6 34 88 0 Educational Science Gießen 68 3.9 5 35 113 4 Political Science Marburg 60 3.9 2 36 141 4 Educational Science Gießen 67 3.9 3 37 163 9 Sociology Marburg 57 3.9 7 38 254 0 Sociology Frankfurt 49 3.9 9 39 292 5 Political Science Marburg 70 3.9 8 40 328 1 Psychology Gießen 72 3.9 2 41 337 4 Sociology Marburg 40 3.9 2 42 376 7 Educational Science Gießen 75 3.9 3 43 402 1 Sociology Gießen 74 3.9 6 44 409 1 Sociology Marburg 46 3.9 2 45 410 3 Psychology Frankfurt 23 3.9 8 46 416 3 Psychology Marburg 56 3.9 3 47 432 0 Psychology Gießen 61 3.9 5 48 454 7 Educational Science Marburg 32 3.9 3 49 465 9 Political Science Gießen 53 3.9 4 50 483 0 Educational Science Gießen 107 3.9 8 51 494 2 Political Science Gießen 95 3.9 8 52 559 0 Sociology Frankfurt 18 3.9 4 53 578 9 Psychology Marburg 38 3.9 4 54 589 9 Sociology Gießen 78 3.9 9 55 608 6 Political Science Gießen 61 3.9 5 56 661 3 Sociology Marburg 36 3.9 6 57 753 4 Political Science Frankfurt 36 3.9 4 58 762 9 Political Science Marburg 49 3.9 10 59 768 4 Educational Science Frankfurt 63 3.9 2 60 772 7 Sociology Gießen 73 3.9 3 61 789 3 Political Science Frankfurt 28 3.9 2 62 848 4 Political Science Marburg 48 3.9 9 63 883 0 Educational Science Frankfurt 42 3.9 2 64 899 7 Psychology Gießen 63 3.9 10 65 917 3 Sociology Marburg 51 3.9 8 66 944 7 Psychology Frankfurt 35 3.9 7 67 945 4 Educational Science Frankfurt 18 3.9 6 68 977 7 Educational Science Gießen 61 3.9 9 69 993 8 Psychology Marburg 47 3.9 2 70 7 7 Educational Science Marburg 39 3.8 3 71 25 2 Sociology Gießen 56 3.8 4 72 31 6 Educational Science Gießen 63 3.8 10 73 48 2 Psychology Frankfurt NA 3.8 5 74 121 7 Educational Science Marburg 59 3.8 7 75 130 8 Educational Science Marburg 36 3.8 8 76 145 1 Educational Science Frankfurt 34 3.8 2 77 152 4 Educational Science Frankfurt 33 3.8 2 78 178 4 Political Science Frankfurt NA 3.8 8 79 233 4 Political Science Frankfurt 18 3.8 3 80 253 4 Political Science Gießen 64 3.8 7 81 265 1 Educational Science Frankfurt 17 3.8 8 82 266 9 Political Science Frankfurt 36 3.8 4 83 273 1 Educational Science Frankfurt 23 3.8 9 84 395 7 Political Science Gießen 75 3.8 7 85 403 7 Psychology Marburg 52 3.8 8 86 424 7 Psychology Gießen 87 3.8 7 87 469 3 Educational Science Marburg 60 3.8 8 88 536 5 Sociology Frankfurt 26 3.8 9 89 552 7 Psychology Marburg 52 3.8 3 90 562 0 Sociology Gießen 77 3.8 3 91 591 2 Political Science Marburg 61 3.8 3 92 651 3 Educational Science Gießen 74 3.8 4 93 667 7 Psychology Frankfurt 17 3.8 5 94 683 8 Sociology Frankfurt 24 3.8 5 95 695 5 Psychology Frankfurt 27 3.8 8 96 742 4 Sociology Marburg 33 3.8 5 97 767 4 Psychology Frankfurt 43 3.8 4 98 797 4 Psychology Frankfurt 16 3.8 6 99 799 9 Educational Science Gießen 52 3.8 6 100 838 0 Sociology Gießen 49 3.8 7 101 855 7 Psychology Gießen 65 3.8 4 102 971 0 Sociology Frankfurt 33 3.8 6 103 15 8 Educational Science Marburg 39 3.7 10 104 45 1 Educational Science Marburg 35 3.7 9 105 58 9 Sociology Frankfurt 39 3.7 6 106 60 0 Sociology Marburg 49 3.7 2 107 94 8 Political Science Marburg 36 3.7 7 108 151 7 Educational Science Marburg 39 3.7 3 109 164 7 Educational Science Marburg 70 3.7 6 110 188 4 Political Science Marburg 43 3.7 6 111 195 4 Political Science Frankfurt 20 3.7 8 112 251 6 Sociology Gießen 76 3.7 9 113 318 0 Educational Science Frankfurt 33 3.7 3 114 356 2 Psychology Frankfurt 30 3.7 10 115 474 3 Political Science Marburg 44 3.7 8 116 487 6 Educational Science Gießen 88 3.7 7 117 511 5 Psychology Gießen 81 3.7 5 118 545 0 Psychology Marburg 52 3.7 9 119 600 7 Sociology Marburg 30 3.7 8 120 630 7 Political Science Marburg 30 3.7 6 121 784 5 Political Science Marburg 57 3.7 3 122 830 8 Sociology Frankfurt 24 3.7 10 123 849 4 Psychology Gießen 74 3.7 6 124 877 9 Educational Science Marburg 43 3.7 3 125 897 0 Sociology Frankfurt 40 3.7 9 126 903 9 Educational Science Frankfurt 42 3.7 8 127 907 2 Psychology Gießen 64 3.7 5 128 956 6 Psychology Gießen 73 3.7 9 129 960 4 Sociology Frankfurt 40 3.7 10 130 34 1 Educational Science Gießen 43 3.6 5 131 59 0 Sociology Gießen 99 3.6 5 132 111 9 Sociology Marburg 60 3.6 6 133 114 2 Educational Science Marburg 35 3.6 2 134 162 4 Psychology Frankfurt 36 3.6 9 135 197 5 Sociology Marburg 25 3.6 6 136 304 8 Educational Science Gießen 63 3.6 7 137 320 4 Political Science Frankfurt 25 3.6 2 138 426 8 Psychology Marburg 35 3.6 3 139 444 2 Sociology Marburg 53 3.6 4 140 459 5 Sociology Marburg 40 3.6 9 141 461 0 Psychology Frankfurt 39 3.6 9 142 462 2 Sociology Frankfurt 16 3.6 7 [ reached 'max' / getOption("max.print") -- omitted 858 rows ] ``` ] ] --- # arrange() .pull-left-40[ Alternativ kann man auch einfach ein Minuszeichen vor die Variable, nach der sortiert werden soll, setzen: ```r arrange(uni, * -abi ) ``` ] -- .pull-right-60[ .scrollable[ ``` ID mot study city distance abi term 1 61 6 Psychology Marburg 42 4.0 4 2 99 3 Sociology Frankfurt 25 4.0 9 3 126 6 Sociology Marburg 42 4.0 5 4 148 5 Educational Science Gießen 64 4.0 9 5 154 8 Psychology Marburg 47 4.0 4 6 156 7 Psychology Frankfurt 21 4.0 9 7 181 8 Sociology Frankfurt 36 4.0 8 8 189 1 Psychology Frankfurt NA 4.0 2 9 232 2 Sociology Gießen 72 4.0 9 10 256 3 Psychology Frankfurt 34 4.0 4 11 268 7 Political Science Marburg 46 4.0 8 12 289 1 Sociology Gießen 71 4.0 7 13 310 0 Psychology Frankfurt 26 4.0 9 14 387 3 Psychology Gießen 71 4.0 4 15 558 8 Psychology Gießen 60 4.0 5 16 593 0 Educational Science Marburg 44 4.0 2 17 594 9 Political Science Gießen 65 4.0 7 18 632 4 Sociology Frankfurt 14 4.0 6 19 643 5 Educational Science Gießen 55 4.0 8 20 680 9 Educational Science Marburg 61 4.0 4 21 717 5 Political Science Frankfurt 51 4.0 3 22 735 9 Psychology Gießen 65 4.0 5 23 757 7 Psychology Marburg 37 4.0 7 24 781 9 Psychology Gießen 74 4.0 9 25 809 3 Educational Science Frankfurt 39 4.0 9 26 824 7 Psychology Gießen 67 4.0 6 27 865 6 Political Science Frankfurt 30 4.0 6 28 898 3 Sociology Frankfurt NA 4.0 9 29 905 9 Psychology Frankfurt 31 4.0 4 30 909 3 Sociology Gießen 55 4.0 9 31 953 7 Psychology Frankfurt 38 4.0 4 32 986 1 Sociology Gießen 80 4.0 3 33 46 3 Educational Science Marburg 44 3.9 6 34 88 0 Educational Science Gießen 68 3.9 5 35 113 4 Political Science Marburg 60 3.9 2 36 141 4 Educational Science Gießen 67 3.9 3 37 163 9 Sociology Marburg 57 3.9 7 38 254 0 Sociology Frankfurt 49 3.9 9 39 292 5 Political Science Marburg 70 3.9 8 40 328 1 Psychology Gießen 72 3.9 2 41 337 4 Sociology Marburg 40 3.9 2 42 376 7 Educational Science Gießen 75 3.9 3 43 402 1 Sociology Gießen 74 3.9 6 44 409 1 Sociology Marburg 46 3.9 2 45 410 3 Psychology Frankfurt 23 3.9 8 46 416 3 Psychology Marburg 56 3.9 3 47 432 0 Psychology Gießen 61 3.9 5 48 454 7 Educational Science Marburg 32 3.9 3 49 465 9 Political Science Gießen 53 3.9 4 50 483 0 Educational Science Gießen 107 3.9 8 51 494 2 Political Science Gießen 95 3.9 8 52 559 0 Sociology Frankfurt 18 3.9 4 53 578 9 Psychology Marburg 38 3.9 4 54 589 9 Sociology Gießen 78 3.9 9 55 608 6 Political Science Gießen 61 3.9 5 56 661 3 Sociology Marburg 36 3.9 6 57 753 4 Political Science Frankfurt 36 3.9 4 58 762 9 Political Science Marburg 49 3.9 10 59 768 4 Educational Science Frankfurt 63 3.9 2 60 772 7 Sociology Gießen 73 3.9 3 61 789 3 Political Science Frankfurt 28 3.9 2 62 848 4 Political Science Marburg 48 3.9 9 63 883 0 Educational Science Frankfurt 42 3.9 2 64 899 7 Psychology Gießen 63 3.9 10 65 917 3 Sociology Marburg 51 3.9 8 66 944 7 Psychology Frankfurt 35 3.9 7 67 945 4 Educational Science Frankfurt 18 3.9 6 68 977 7 Educational Science Gießen 61 3.9 9 69 993 8 Psychology Marburg 47 3.9 2 70 7 7 Educational Science Marburg 39 3.8 3 71 25 2 Sociology Gießen 56 3.8 4 72 31 6 Educational Science Gießen 63 3.8 10 73 48 2 Psychology Frankfurt NA 3.8 5 74 121 7 Educational Science Marburg 59 3.8 7 75 130 8 Educational Science Marburg 36 3.8 8 76 145 1 Educational Science Frankfurt 34 3.8 2 77 152 4 Educational Science Frankfurt 33 3.8 2 78 178 4 Political Science Frankfurt NA 3.8 8 79 233 4 Political Science Frankfurt 18 3.8 3 80 253 4 Political Science Gießen 64 3.8 7 81 265 1 Educational Science Frankfurt 17 3.8 8 82 266 9 Political Science Frankfurt 36 3.8 4 83 273 1 Educational Science Frankfurt 23 3.8 9 84 395 7 Political Science Gießen 75 3.8 7 85 403 7 Psychology Marburg 52 3.8 8 86 424 7 Psychology Gießen 87 3.8 7 87 469 3 Educational Science Marburg 60 3.8 8 88 536 5 Sociology Frankfurt 26 3.8 9 89 552 7 Psychology Marburg 52 3.8 3 90 562 0 Sociology Gießen 77 3.8 3 91 591 2 Political Science Marburg 61 3.8 3 92 651 3 Educational Science Gießen 74 3.8 4 93 667 7 Psychology Frankfurt 17 3.8 5 94 683 8 Sociology Frankfurt 24 3.8 5 95 695 5 Psychology Frankfurt 27 3.8 8 96 742 4 Sociology Marburg 33 3.8 5 97 767 4 Psychology Frankfurt 43 3.8 4 98 797 4 Psychology Frankfurt 16 3.8 6 99 799 9 Educational Science Gießen 52 3.8 6 100 838 0 Sociology Gießen 49 3.8 7 101 855 7 Psychology Gießen 65 3.8 4 102 971 0 Sociology Frankfurt 33 3.8 6 103 15 8 Educational Science Marburg 39 3.7 10 104 45 1 Educational Science Marburg 35 3.7 9 105 58 9 Sociology Frankfurt 39 3.7 6 106 60 0 Sociology Marburg 49 3.7 2 107 94 8 Political Science Marburg 36 3.7 7 108 151 7 Educational Science Marburg 39 3.7 3 109 164 7 Educational Science Marburg 70 3.7 6 110 188 4 Political Science Marburg 43 3.7 6 111 195 4 Political Science Frankfurt 20 3.7 8 112 251 6 Sociology Gießen 76 3.7 9 113 318 0 Educational Science Frankfurt 33 3.7 3 114 356 2 Psychology Frankfurt 30 3.7 10 115 474 3 Political Science Marburg 44 3.7 8 116 487 6 Educational Science Gießen 88 3.7 7 117 511 5 Psychology Gießen 81 3.7 5 118 545 0 Psychology Marburg 52 3.7 9 119 600 7 Sociology Marburg 30 3.7 8 120 630 7 Political Science Marburg 30 3.7 6 121 784 5 Political Science Marburg 57 3.7 3 122 830 8 Sociology Frankfurt 24 3.7 10 123 849 4 Psychology Gießen 74 3.7 6 124 877 9 Educational Science Marburg 43 3.7 3 125 897 0 Sociology Frankfurt 40 3.7 9 126 903 9 Educational Science Frankfurt 42 3.7 8 127 907 2 Psychology Gießen 64 3.7 5 128 956 6 Psychology Gießen 73 3.7 9 129 960 4 Sociology Frankfurt 40 3.7 10 130 34 1 Educational Science Gießen 43 3.6 5 131 59 0 Sociology Gießen 99 3.6 5 132 111 9 Sociology Marburg 60 3.6 6 133 114 2 Educational Science Marburg 35 3.6 2 134 162 4 Psychology Frankfurt 36 3.6 9 135 197 5 Sociology Marburg 25 3.6 6 136 304 8 Educational Science Gießen 63 3.6 7 137 320 4 Political Science Frankfurt 25 3.6 2 138 426 8 Psychology Marburg 35 3.6 3 139 444 2 Sociology Marburg 53 3.6 4 140 459 5 Sociology Marburg 40 3.6 9 141 461 0 Psychology Frankfurt 39 3.6 9 142 462 2 Sociology Frankfurt 16 3.6 7 [ reached 'max' / getOption("max.print") -- omitted 858 rows ] ``` ] ] --- # mutate() .pull-left-40[ Mit **mutate()** werden neue Variablen geschaffen. Zum Beispiel könnten wir eine Variable schaffen, die den Abstand zum Mittelwert in der Variable `abi` misst. **Wichtig:** Wir haben zwar hier die Variable `abiDist` gespeichert, aber diese nicht im Datensatz gespeichert. ] -- .pull-right-60[ ```r mutate(uni, * abiDist = abi - mean(abi, * na.rm = TRUE * ) ) ``` .scrollable[ ``` ID abi abiDist mot study city distance term 1 1 1.6 -0.9347 8 Political Science Frankfurt NA 3 2 2 3.0 0.4653 4 Sociology Frankfurt 36 5 3 3 2.1 -0.4347 2 Political Science Marburg 56 4 4 4 3.3 0.7653 1 Sociology Gießen 62 5 5 5 1.0 -1.5347 3 Psychology Marburg 43 8 6 6 1.1 -1.4347 1 Political Science Marburg 43 2 7 7 3.8 1.2653 7 Educational Science Marburg 39 3 8 8 2.0 -0.5347 0 Sociology Marburg 44 3 9 9 1.3 -1.2347 6 Psychology Marburg 38 9 10 10 1.6 -0.9347 6 Psychology Gießen 59 4 11 11 2.4 -0.1347 4 Psychology Gießen 69 2 12 12 2.6 0.0653 2 Sociology Frankfurt 43 6 13 13 2.6 0.0653 1 Educational Science Marburg 49 2 14 14 1.0 -1.5347 7 Political Science Marburg 44 8 15 15 3.7 1.1653 8 Educational Science Marburg 39 10 16 16 1.4 -1.1347 8 Political Science Frankfurt 21 2 17 17 3.0 0.4653 7 Educational Science Marburg 79 6 18 18 3.1 0.5653 0 Sociology Frankfurt 33 5 19 19 2.4 -0.1347 6 Educational Science Marburg 44 5 20 20 3.0 0.4653 1 Psychology Gießen 63 7 21 21 2.5 -0.0347 2 Educational Science Gießen 74 9 22 22 2.2 -0.3347 6 Educational Science Gießen 60 4 23 23 1.5 -1.0347 1 Sociology Frankfurt 14 9 24 24 3.3 0.7653 0 Sociology Gießen 75 6 25 25 3.8 1.2653 2 Sociology Gießen 56 4 26 26 2.8 0.2653 4 Educational Science Marburg 50 4 27 27 1.1 -1.4347 5 Psychology Marburg 39 8 28 28 2.7 0.1653 2 Sociology Gießen 82 9 29 29 3.0 0.4653 1 Psychology Marburg 44 2 30 30 2.4 -0.1347 2 Sociology Marburg 41 3 31 31 3.8 1.2653 6 Educational Science Gießen 63 10 32 32 1.1 -1.4347 6 Sociology Marburg 30 7 33 33 2.8 0.2653 9 Educational Science Gießen 55 7 34 34 3.6 1.0653 1 Educational Science Gießen 43 5 35 35 3.1 0.5653 0 Sociology Gießen 53 5 36 36 1.4 -1.1347 4 Sociology Frankfurt 28 5 37 37 2.2 -0.3347 8 Political Science Marburg 44 10 38 38 2.2 -0.3347 5 Political Science Gießen 86 6 39 39 2.3 -0.2347 4 Political Science Gießen 56 6 40 40 2.3 -0.2347 5 Educational Science Gießen 58 10 41 41 2.9 0.3653 7 Psychology Gießen 65 6 42 42 2.7 0.1653 0 Political Science Marburg 38 9 43 43 1.7 -0.8347 6 Psychology Frankfurt 20 2 44 44 2.6 0.0653 7 Educational Science Gießen 55 9 45 45 3.7 1.1653 1 Educational Science Marburg 35 9 46 46 3.9 1.3653 3 Educational Science Marburg 44 6 47 47 2.7 0.1653 0 Psychology Frankfurt 25 6 48 48 3.8 1.2653 2 Psychology Frankfurt NA 5 49 49 2.6 0.0653 5 Sociology Marburg 43 8 50 50 2.2 -0.3347 7 Educational Science Frankfurt 18 9 51 51 1.6 -0.9347 5 Political Science Gießen 56 3 52 52 1.2 -1.3347 0 Educational Science Marburg 48 6 53 53 3.4 0.8653 1 Political Science Marburg 57 3 54 54 2.6 0.0653 2 Political Science Marburg 69 3 55 55 3.2 0.6653 6 Sociology Frankfurt 22 5 56 56 1.4 -1.1347 6 Educational Science Frankfurt 50 6 57 57 1.4 -1.1347 3 Sociology Frankfurt 17 6 58 58 3.7 1.1653 9 Sociology Frankfurt 39 6 59 59 3.6 1.0653 0 Sociology Gießen 99 5 60 60 3.7 1.1653 0 Sociology Marburg 49 2 61 61 4.0 1.4653 6 Psychology Marburg 42 4 62 62 1.7 -0.8347 3 Psychology Frankfurt 31 4 63 63 1.6 -0.9347 9 Psychology Frankfurt 52 2 64 64 2.2 -0.3347 8 Political Science Gießen 55 10 65 65 2.2 -0.3347 8 Political Science Gießen 85 9 66 66 2.4 -0.1347 3 Political Science Marburg 66 7 67 67 2.5 -0.0347 7 Psychology Marburg 54 2 68 68 1.6 -0.9347 5 Educational Science Marburg 50 2 69 69 2.7 0.1653 4 Sociology Gießen 63 6 70 70 2.3 -0.2347 3 Educational Science Marburg 45 10 71 71 2.2 -0.3347 2 Political Science Marburg 58 7 72 72 3.4 0.8653 8 Psychology Marburg 74 4 73 73 3.4 0.8653 8 Sociology Gießen 67 5 74 74 2.9 0.3653 6 Sociology Gießen 52 3 75 75 1.6 -0.9347 7 Educational Science Gießen 60 8 76 76 1.7 -0.8347 5 Political Science Gießen 72 4 77 77 1.9 -0.6347 6 Psychology Frankfurt 27 10 78 78 3.0 0.4653 9 Sociology Frankfurt 29 2 79 79 1.8 -0.7347 7 Political Science Frankfurt 29 9 80 80 2.9 0.3653 6 Educational Science Frankfurt 15 4 81 81 2.4 -0.1347 8 Sociology Gießen 66 6 82 82 1.6 -0.9347 5 Political Science Frankfurt 41 6 83 83 2.0 -0.5347 0 Political Science Gießen 77 9 84 84 2.2 -0.3347 4 Sociology Gießen 75 8 85 85 2.3 -0.2347 5 Sociology Frankfurt 26 8 86 86 2.3 -0.2347 1 Psychology Marburg 48 5 87 87 1.0 -1.5347 9 Educational Science Gießen 54 4 88 88 3.9 1.3653 0 Educational Science Gießen 68 5 89 89 2.1 -0.4347 7 Psychology Marburg 53 2 90 90 2.7 0.1653 3 Political Science Gießen 89 3 91 91 1.1 -1.4347 5 Psychology Gießen 80 9 92 92 1.7 -0.8347 8 Sociology Frankfurt 25 7 93 93 2.5 -0.0347 6 Psychology Marburg 54 8 94 94 3.7 1.1653 8 Political Science Marburg 36 7 95 95 2.9 0.3653 3 Psychology Marburg 60 4 96 96 1.1 -1.4347 2 Educational Science Frankfurt 43 4 97 97 2.3 -0.2347 9 Educational Science Frankfurt 56 3 98 98 2.1 -0.4347 2 Sociology Marburg 55 4 99 99 4.0 1.4653 3 Sociology Frankfurt 25 9 100 100 2.7 0.1653 6 Educational Science Frankfurt 32 3 101 101 3.4 0.8653 9 Sociology Frankfurt 25 9 102 102 3.2 0.6653 9 Sociology Frankfurt 21 9 103 103 2.0 -0.5347 7 Educational Science Frankfurt 33 3 104 104 1.6 -0.9347 7 Political Science Frankfurt 20 2 105 105 3.4 0.8653 1 Political Science Marburg 52 3 106 106 1.0 -1.5347 9 Political Science Frankfurt 35 7 107 107 2.2 -0.3347 3 Psychology Marburg 49 6 108 108 3.0 0.4653 4 Educational Science Frankfurt 29 9 109 109 2.1 -0.4347 4 Political Science Marburg 42 6 110 110 1.8 -0.7347 1 Sociology Frankfurt 18 7 111 111 3.6 1.0653 9 Sociology Marburg 60 6 112 112 2.4 -0.1347 5 Psychology Marburg 50 9 113 113 3.9 1.3653 4 Political Science Marburg 60 2 114 114 3.6 1.0653 2 Educational Science Marburg 35 2 115 115 1.3 -1.2347 7 Political Science Frankfurt 33 5 116 116 1.9 -0.6347 3 Sociology Marburg 58 5 117 117 2.7 0.1653 1 Educational Science Gießen 68 7 118 118 2.1 -0.4347 9 Sociology Marburg 48 2 119 119 3.1 0.5653 2 Sociology Gießen 59 5 120 120 2.9 0.3653 4 Sociology Marburg 74 5 121 121 3.8 1.2653 7 Educational Science Marburg 59 7 122 122 1.7 -0.8347 1 Educational Science Frankfurt 53 7 123 123 3.3 0.7653 4 Political Science Gießen 70 3 124 124 3.1 0.5653 4 Educational Science Gießen 61 4 125 125 3.4 0.8653 3 Educational Science Gießen 51 4 [ reached 'max' / getOption("max.print") -- omitted 875 rows ] ``` ] ] --- # mutate() & case_when() Bei der Erstellung kategorieller Variablen muss man zusätzlich die Funktion **case_when()** nutzen. **case_when()** funktioniert wie eine Aneinanderreihung von *if*-Bedingung, wobei die spezifischste Bestimmung zuerst kommen sollte. (spezifisch -> allgemein). -- Im Beispiel schaffen wir eine Dummy-Variable, die anzeigt, ob die Person in Marburg studiert (`1`) oder nicht (`0`). -- Die Grammatik in **case_when()** ist wie folgt: ```r case_when(Fallauswahl ~ neuer Codewert) ``` -- Im Beispiel: ```r mutate(uni, * dumPum = case_when(city == "Marburg" ~ 1, # "Fallauswahl" ~ "neuer Codewert" * city == "Gießen" ~ 0, * city == "Frankfurt" ~ 0 ) ) ``` --- # mutate() & case_when() .center[ .scrollable[ ``` ID mot study city distance abi term dumPum 1 1 8 Political Science Frankfurt NA 1.6 3 0 2 2 4 Sociology Frankfurt 36 3.0 5 0 3 3 2 Political Science Marburg 56 2.1 4 1 4 4 1 Sociology Gießen 62 3.3 5 0 5 5 3 Psychology Marburg 43 1.0 8 1 6 6 1 Political Science Marburg 43 1.1 2 1 7 7 7 Educational Science Marburg 39 3.8 3 1 8 8 0 Sociology Marburg 44 2.0 3 1 9 9 6 Psychology Marburg 38 1.3 9 1 10 10 6 Psychology Gießen 59 1.6 4 0 11 11 4 Psychology Gießen 69 2.4 2 0 12 12 2 Sociology Frankfurt 43 2.6 6 0 13 13 1 Educational Science Marburg 49 2.6 2 1 14 14 7 Political Science Marburg 44 1.0 8 1 15 15 8 Educational Science Marburg 39 3.7 10 1 16 16 8 Political Science Frankfurt 21 1.4 2 0 17 17 7 Educational Science Marburg 79 3.0 6 1 18 18 0 Sociology Frankfurt 33 3.1 5 0 19 19 6 Educational Science Marburg 44 2.4 5 1 20 20 1 Psychology Gießen 63 3.0 7 0 21 21 2 Educational Science Gießen 74 2.5 9 0 22 22 6 Educational Science Gießen 60 2.2 4 0 23 23 1 Sociology Frankfurt 14 1.5 9 0 24 24 0 Sociology Gießen 75 3.3 6 0 25 25 2 Sociology Gießen 56 3.8 4 0 26 26 4 Educational Science Marburg 50 2.8 4 1 27 27 5 Psychology Marburg 39 1.1 8 1 28 28 2 Sociology Gießen 82 2.7 9 0 29 29 1 Psychology Marburg 44 3.0 2 1 30 30 2 Sociology Marburg 41 2.4 3 1 31 31 6 Educational Science Gießen 63 3.8 10 0 32 32 6 Sociology Marburg 30 1.1 7 1 33 33 9 Educational Science Gießen 55 2.8 7 0 34 34 1 Educational Science Gießen 43 3.6 5 0 35 35 0 Sociology Gießen 53 3.1 5 0 36 36 4 Sociology Frankfurt 28 1.4 5 0 37 37 8 Political Science Marburg 44 2.2 10 1 38 38 5 Political Science Gießen 86 2.2 6 0 39 39 4 Political Science Gießen 56 2.3 6 0 40 40 5 Educational Science Gießen 58 2.3 10 0 41 41 7 Psychology Gießen 65 2.9 6 0 42 42 0 Political Science Marburg 38 2.7 9 1 43 43 6 Psychology Frankfurt 20 1.7 2 0 44 44 7 Educational Science Gießen 55 2.6 9 0 45 45 1 Educational Science Marburg 35 3.7 9 1 46 46 3 Educational Science Marburg 44 3.9 6 1 47 47 0 Psychology Frankfurt 25 2.7 6 0 48 48 2 Psychology Frankfurt NA 3.8 5 0 49 49 5 Sociology Marburg 43 2.6 8 1 50 50 7 Educational Science Frankfurt 18 2.2 9 0 51 51 5 Political Science Gießen 56 1.6 3 0 52 52 0 Educational Science Marburg 48 1.2 6 1 53 53 1 Political Science Marburg 57 3.4 3 1 54 54 2 Political Science Marburg 69 2.6 3 1 55 55 6 Sociology Frankfurt 22 3.2 5 0 56 56 6 Educational Science Frankfurt 50 1.4 6 0 57 57 3 Sociology Frankfurt 17 1.4 6 0 58 58 9 Sociology Frankfurt 39 3.7 6 0 59 59 0 Sociology Gießen 99 3.6 5 0 60 60 0 Sociology Marburg 49 3.7 2 1 61 61 6 Psychology Marburg 42 4.0 4 1 62 62 3 Psychology Frankfurt 31 1.7 4 0 63 63 9 Psychology Frankfurt 52 1.6 2 0 64 64 8 Political Science Gießen 55 2.2 10 0 65 65 8 Political Science Gießen 85 2.2 9 0 66 66 3 Political Science Marburg 66 2.4 7 1 67 67 7 Psychology Marburg 54 2.5 2 1 68 68 5 Educational Science Marburg 50 1.6 2 1 69 69 4 Sociology Gießen 63 2.7 6 0 70 70 3 Educational Science Marburg 45 2.3 10 1 71 71 2 Political Science Marburg 58 2.2 7 1 72 72 8 Psychology Marburg 74 3.4 4 1 73 73 8 Sociology Gießen 67 3.4 5 0 74 74 6 Sociology Gießen 52 2.9 3 0 75 75 7 Educational Science Gießen 60 1.6 8 0 76 76 5 Political Science Gießen 72 1.7 4 0 77 77 6 Psychology Frankfurt 27 1.9 10 0 78 78 9 Sociology Frankfurt 29 3.0 2 0 79 79 7 Political Science Frankfurt 29 1.8 9 0 80 80 6 Educational Science Frankfurt 15 2.9 4 0 81 81 8 Sociology Gießen 66 2.4 6 0 82 82 5 Political Science Frankfurt 41 1.6 6 0 83 83 0 Political Science Gießen 77 2.0 9 0 84 84 4 Sociology Gießen 75 2.2 8 0 85 85 5 Sociology Frankfurt 26 2.3 8 0 86 86 1 Psychology Marburg 48 2.3 5 1 87 87 9 Educational Science Gießen 54 1.0 4 0 88 88 0 Educational Science Gießen 68 3.9 5 0 89 89 7 Psychology Marburg 53 2.1 2 1 90 90 3 Political Science Gießen 89 2.7 3 0 91 91 5 Psychology Gießen 80 1.1 9 0 92 92 8 Sociology Frankfurt 25 1.7 7 0 93 93 6 Psychology Marburg 54 2.5 8 1 94 94 8 Political Science Marburg 36 3.7 7 1 95 95 3 Psychology Marburg 60 2.9 4 1 96 96 2 Educational Science Frankfurt 43 1.1 4 0 97 97 9 Educational Science Frankfurt 56 2.3 3 0 98 98 2 Sociology Marburg 55 2.1 4 1 99 99 3 Sociology Frankfurt 25 4.0 9 0 100 100 6 Educational Science Frankfurt 32 2.7 3 0 101 101 9 Sociology Frankfurt 25 3.4 9 0 102 102 9 Sociology Frankfurt 21 3.2 9 0 103 103 7 Educational Science Frankfurt 33 2.0 3 0 104 104 7 Political Science Frankfurt 20 1.6 2 0 105 105 1 Political Science Marburg 52 3.4 3 1 106 106 9 Political Science Frankfurt 35 1.0 7 0 107 107 3 Psychology Marburg 49 2.2 6 1 108 108 4 Educational Science Frankfurt 29 3.0 9 0 109 109 4 Political Science Marburg 42 2.1 6 1 110 110 1 Sociology Frankfurt 18 1.8 7 0 111 111 9 Sociology Marburg 60 3.6 6 1 112 112 5 Psychology Marburg 50 2.4 9 1 113 113 4 Political Science Marburg 60 3.9 2 1 114 114 2 Educational Science Marburg 35 3.6 2 1 115 115 7 Political Science Frankfurt 33 1.3 5 0 116 116 3 Sociology Marburg 58 1.9 5 1 117 117 1 Educational Science Gießen 68 2.7 7 0 118 118 9 Sociology Marburg 48 2.1 2 1 119 119 2 Sociology Gießen 59 3.1 5 0 120 120 4 Sociology Marburg 74 2.9 5 1 121 121 7 Educational Science Marburg 59 3.8 7 1 122 122 1 Educational Science Frankfurt 53 1.7 7 0 123 123 4 Political Science Gießen 70 3.3 3 0 124 124 4 Educational Science Gießen 61 3.1 4 0 125 125 3 Educational Science Gießen 51 3.4 4 0 [ reached 'max' / getOption("max.print") -- omitted 875 rows ] ``` ] ] --- # mutate() & case_when() Auch hier könnten mehrere Bedingungen verknüpft werden: So möchten wir einen Dummy schaffen, der anzeigt, ob eine Person in Marburg Erziehungswissenschaften studiert. -- Wir würden wie folgt beginnen: ```r mutate(uni, * dumPumEs = case_when(city == "Marburg" & study == "Educational Science" ~ 1 ) ) ``` -- Wenn man nicht alle verschiedenen Kombinationen eingeben möchte und zum Beispiel nur eine von Interesse ist, kann man mit `TRUE ~ 0` allen restlichen Fällen direkt einen Wert zuordnen (aber nur denselben Wert!). Alle Kombinationen, die nicht vor `TRUE ~ 0` definiert wurden, erhalten automatisch den in der `TRUE`-Zeile definierten Wert. -- ```r mutate(uni, dumPumEs = case_when(city == "Marburg" & study == "Educational Science" ~ 1, * TRUE ~ 0 ) ) ``` --- # mutate() & case_when() .center[ .scrollable[ ``` ID mot study city distance abi term dumPumEs 1 1 8 Political Science Frankfurt NA 1.6 3 0 2 2 4 Sociology Frankfurt 36 3.0 5 0 3 3 2 Political Science Marburg 56 2.1 4 0 4 4 1 Sociology Gießen 62 3.3 5 0 5 5 3 Psychology Marburg 43 1.0 8 0 6 6 1 Political Science Marburg 43 1.1 2 0 7 7 7 Educational Science Marburg 39 3.8 3 1 8 8 0 Sociology Marburg 44 2.0 3 0 9 9 6 Psychology Marburg 38 1.3 9 0 10 10 6 Psychology Gießen 59 1.6 4 0 11 11 4 Psychology Gießen 69 2.4 2 0 12 12 2 Sociology Frankfurt 43 2.6 6 0 13 13 1 Educational Science Marburg 49 2.6 2 1 14 14 7 Political Science Marburg 44 1.0 8 0 15 15 8 Educational Science Marburg 39 3.7 10 1 16 16 8 Political Science Frankfurt 21 1.4 2 0 17 17 7 Educational Science Marburg 79 3.0 6 1 18 18 0 Sociology Frankfurt 33 3.1 5 0 19 19 6 Educational Science Marburg 44 2.4 5 1 20 20 1 Psychology Gießen 63 3.0 7 0 21 21 2 Educational Science Gießen 74 2.5 9 0 22 22 6 Educational Science Gießen 60 2.2 4 0 23 23 1 Sociology Frankfurt 14 1.5 9 0 24 24 0 Sociology Gießen 75 3.3 6 0 25 25 2 Sociology Gießen 56 3.8 4 0 26 26 4 Educational Science Marburg 50 2.8 4 1 27 27 5 Psychology Marburg 39 1.1 8 0 28 28 2 Sociology Gießen 82 2.7 9 0 29 29 1 Psychology Marburg 44 3.0 2 0 30 30 2 Sociology Marburg 41 2.4 3 0 31 31 6 Educational Science Gießen 63 3.8 10 0 32 32 6 Sociology Marburg 30 1.1 7 0 33 33 9 Educational Science Gießen 55 2.8 7 0 34 34 1 Educational Science Gießen 43 3.6 5 0 35 35 0 Sociology Gießen 53 3.1 5 0 36 36 4 Sociology Frankfurt 28 1.4 5 0 37 37 8 Political Science Marburg 44 2.2 10 0 38 38 5 Political Science Gießen 86 2.2 6 0 39 39 4 Political Science Gießen 56 2.3 6 0 40 40 5 Educational Science Gießen 58 2.3 10 0 41 41 7 Psychology Gießen 65 2.9 6 0 42 42 0 Political Science Marburg 38 2.7 9 0 43 43 6 Psychology Frankfurt 20 1.7 2 0 44 44 7 Educational Science Gießen 55 2.6 9 0 45 45 1 Educational Science Marburg 35 3.7 9 1 46 46 3 Educational Science Marburg 44 3.9 6 1 47 47 0 Psychology Frankfurt 25 2.7 6 0 48 48 2 Psychology Frankfurt NA 3.8 5 0 49 49 5 Sociology Marburg 43 2.6 8 0 50 50 7 Educational Science Frankfurt 18 2.2 9 0 51 51 5 Political Science Gießen 56 1.6 3 0 52 52 0 Educational Science Marburg 48 1.2 6 1 53 53 1 Political Science Marburg 57 3.4 3 0 54 54 2 Political Science Marburg 69 2.6 3 0 55 55 6 Sociology Frankfurt 22 3.2 5 0 56 56 6 Educational Science Frankfurt 50 1.4 6 0 57 57 3 Sociology Frankfurt 17 1.4 6 0 58 58 9 Sociology Frankfurt 39 3.7 6 0 59 59 0 Sociology Gießen 99 3.6 5 0 60 60 0 Sociology Marburg 49 3.7 2 0 61 61 6 Psychology Marburg 42 4.0 4 0 62 62 3 Psychology Frankfurt 31 1.7 4 0 63 63 9 Psychology Frankfurt 52 1.6 2 0 64 64 8 Political Science Gießen 55 2.2 10 0 65 65 8 Political Science Gießen 85 2.2 9 0 66 66 3 Political Science Marburg 66 2.4 7 0 67 67 7 Psychology Marburg 54 2.5 2 0 68 68 5 Educational Science Marburg 50 1.6 2 1 69 69 4 Sociology Gießen 63 2.7 6 0 70 70 3 Educational Science Marburg 45 2.3 10 1 71 71 2 Political Science Marburg 58 2.2 7 0 72 72 8 Psychology Marburg 74 3.4 4 0 73 73 8 Sociology Gießen 67 3.4 5 0 74 74 6 Sociology Gießen 52 2.9 3 0 75 75 7 Educational Science Gießen 60 1.6 8 0 76 76 5 Political Science Gießen 72 1.7 4 0 77 77 6 Psychology Frankfurt 27 1.9 10 0 78 78 9 Sociology Frankfurt 29 3.0 2 0 79 79 7 Political Science Frankfurt 29 1.8 9 0 80 80 6 Educational Science Frankfurt 15 2.9 4 0 81 81 8 Sociology Gießen 66 2.4 6 0 82 82 5 Political Science Frankfurt 41 1.6 6 0 83 83 0 Political Science Gießen 77 2.0 9 0 84 84 4 Sociology Gießen 75 2.2 8 0 85 85 5 Sociology Frankfurt 26 2.3 8 0 86 86 1 Psychology Marburg 48 2.3 5 0 87 87 9 Educational Science Gießen 54 1.0 4 0 88 88 0 Educational Science Gießen 68 3.9 5 0 89 89 7 Psychology Marburg 53 2.1 2 0 90 90 3 Political Science Gießen 89 2.7 3 0 91 91 5 Psychology Gießen 80 1.1 9 0 92 92 8 Sociology Frankfurt 25 1.7 7 0 93 93 6 Psychology Marburg 54 2.5 8 0 94 94 8 Political Science Marburg 36 3.7 7 0 95 95 3 Psychology Marburg 60 2.9 4 0 96 96 2 Educational Science Frankfurt 43 1.1 4 0 97 97 9 Educational Science Frankfurt 56 2.3 3 0 98 98 2 Sociology Marburg 55 2.1 4 0 99 99 3 Sociology Frankfurt 25 4.0 9 0 100 100 6 Educational Science Frankfurt 32 2.7 3 0 101 101 9 Sociology Frankfurt 25 3.4 9 0 102 102 9 Sociology Frankfurt 21 3.2 9 0 103 103 7 Educational Science Frankfurt 33 2.0 3 0 104 104 7 Political Science Frankfurt 20 1.6 2 0 105 105 1 Political Science Marburg 52 3.4 3 0 106 106 9 Political Science Frankfurt 35 1.0 7 0 107 107 3 Psychology Marburg 49 2.2 6 0 108 108 4 Educational Science Frankfurt 29 3.0 9 0 109 109 4 Political Science Marburg 42 2.1 6 0 110 110 1 Sociology Frankfurt 18 1.8 7 0 111 111 9 Sociology Marburg 60 3.6 6 0 112 112 5 Psychology Marburg 50 2.4 9 0 113 113 4 Political Science Marburg 60 3.9 2 0 114 114 2 Educational Science Marburg 35 3.6 2 1 115 115 7 Political Science Frankfurt 33 1.3 5 0 116 116 3 Sociology Marburg 58 1.9 5 0 117 117 1 Educational Science Gießen 68 2.7 7 0 118 118 9 Sociology Marburg 48 2.1 2 0 119 119 2 Sociology Gießen 59 3.1 5 0 120 120 4 Sociology Marburg 74 2.9 5 0 121 121 7 Educational Science Marburg 59 3.8 7 1 122 122 1 Educational Science Frankfurt 53 1.7 7 0 123 123 4 Political Science Gießen 70 3.3 3 0 124 124 4 Educational Science Gießen 61 3.1 4 0 125 125 3 Educational Science Gießen 51 3.4 4 0 [ reached 'max' / getOption("max.print") -- omitted 875 rows ] ``` ] ] --- # summarise() Mit **summarise()** (oder **summarize()**) können vereinfacht erste Einblicke in die Daten erfolgen. So könnten wir uns z.B. den Mittelwert von `term` ausgeben lassen. -- ```r summarise(uni, * mean(term) ) ``` ``` mean(term) 1 6.069 ``` -- In **summarise()** können verschiedene Funktionen genutzt werden, die auf die Variablen im Datensatz angewendet werden können. Auch können direkt mehrere Werte ausgegeben werden. -- **Wichtig:** Das Ausgabe-Format ist immer ein *tibble*. .pull-left[ ```r summarise(uni, mean(term), mean(mot) ) ``` ] .pull-right[ ``` mean(term) mean(mot) 1 6.069 4.561 ``` ] --- # summarise_if() Die Unterfunktion **summarise_if()** bietet dazu die Möglichkeit leicht auf eine Gruppe von Variablen Funktionen anzuwenden, also zum Beispiel auf alle numerischen Variablen: -- .pull-left-40[ ```r summarise_if(uni, * is.numeric, list(mean = mean, sd = sd ) ) ``` ] -- .pull-right-60[ .center[ ``` ID_mean mot_mean distance_mean abi_mean term_mean ID_sd mot_sd distance_sd abi_sd term_sd 1 500.5 4.561 NA 2.5347 6.069 288.8194 2.897011 NA 0.8741453 2.578544 ``` ] ] -- Wer weiß, warum hier teils `NA` angezeigt wird? --- # summarise_at() Die Unterfunktion **summarise_at()** bietet die Möglichkeit nur bei bestimmten Variablen die Funktion anzuwenden: -- .pull-left-30[ ```r summarise_at(uni, * vars(mot, * abi, * term ), list(mean = mean, sd = sd ) ) ``` ] -- .pull-right-60[ .center[ ``` mot_mean abi_mean term_mean mot_sd abi_sd term_sd 1 4.561 2.5347 6.069 2.897011 0.8741453 2.578544 ``` ] ] --- # group_by() .pull-left-40[ Mit **group_by()** kann der Datensatz gruppiert werden, also zum Beispiel nach eine kategoriellen Variable. In `uni`-Datensatz zum Beispiel nach `study`: ```r group_by(uni, `study` ) ``` ] .pull-right-60[ .scrollable[ ``` # A tibble: 1,000 x 7 # Groups: study [4] ID mot study city distance abi term <int> <int> <fct> <fct> <dbl> <dbl> <int> 1 1 8 Political Science Frankfurt NA 1.6 3 2 2 4 Sociology Frankfurt 36 3 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 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 3 9 9 6 Psychology Marburg 38 1.3 9 10 10 6 Psychology Gießen 59 1.6 4 # ... with 990 more rows ``` ] ] -- Was sehen wir? ??? Antwort: **Nichts!** --- # group_by() **group_by()** macht nichts weiter als die Daten zu gruppieren, die Ausgabe verändert sich dabei erstmal nicht. Erst in Kombination mit weiteren Funktionen, wird dies sichtbar: -- .pull-left-40[ ```r summarize(group_by(uni, study ), * mean(term) ) ``` ] -- .pull-right-60[ .center[ ``` # A tibble: 4 x 2 study `mean(term)` <fct> <dbl> 1 Political Science 5.93 2 Sociology 6.13 3 Educational Science 6.22 4 Psychology 5.96 ``` ] ] -- Jetzt haben wir für jeden Studienort einen Mittelwert für das Fachsemester (`term`). -- **Wichtig**: Wenn Daten gespeichert oder übergeben werden, sollte am Ende die Befehlskette immer mit `ungroup()` enden, um die Datenteilung nicht zu übergeben! --- class: inverse2, mline, center, middle # Piping `%>%` --- # Pipes mit tidyverse Mit den sogenannte *pipes* können Ergebnisse von Ausführungsschritten weitergegeben werden. Dies ist vorteilhaft, da so verschiedene Schritte direkt ausgeführt werden können. Auch kann so Code oftmas leichter nachvollzogen werden. -- Den *pipe*-Operator in `tidyverse` ist `%>%` und kann einfach per Tastenkürzel hinzugefügt werden (`Strg`/`Cmd` + `Shift` + `M`). -- Seit R Version 4.0 gibt es den Pipe-Operator auch in RBase (`\>`), daher diese beiden nicht verwechseln. --- # Pipes Hier mal ein Beispiel: Das Ziel ist es eine Variable zu erstellen, die den Abiturschnitt pro Uni-Stadt ausgibt. Das könnte die Frage beantworten, ob besonders gute Schüler:innen einen der drei Studienorte präferieren. --- # Beispiel Pipes Die Schritte, die wir hierbei machen, sind folgende: -- .pull-left[ 1. Wir geben den Datensatz `uni` weiter. 2. Wir gruppieren den Datensatz nach `city`. 3. Wir berechnen eine neue Variable `abiMean`. 4. Wir heben die Gruppierung wieder auf. 5. (bzw. 0.) Wir überspeichern den alten Datensatz. ] -- .pull-right[ ```r uni <- uni %>% group_by(city) %>% mutate(abiMean = mean(abi, na.rm = TRUE ) ) %>% * ungroup() table(uni$city, uni$abiMean) ``` .center[ ``` 2.51 2.51597633136095 2.58269230769231 Gießen 0 338 0 Marburg 350 0 0 Frankfurt 0 0 312 ``` ] ] --- # Pipes Alternativ könnten wir uns dies auch erstmal nur ausgeben lassen. -- .pull-left[ ```r uni %>% group_by(city) %>% summarize(mean = mean(abi, na.rm = TRUE ) ) ``` ] -- .pull-right[ .center[ ``` # A tibble: 3 x 2 city mean <fct> <dbl> 1 Gießen 2.52 2 Marburg 2.51 3 Frankfurt 2.58 ``` ] ] --- # Pipes Ein weiteres Beispiel: Wir möchten Studierende nach der Anzahl des Fachsemesters kategorisieren. Die neue Variable `termg` soll zwischen: -- - Anfänger:innen (<=2 Semester) - Erfahrene (>2 & <= 6 Semester) - Langzeitstudierende (>6 Semester) unterscheiden. -- .pull-left-60[ ```r uni <- uni %>% mutate(termg = case_when(term <= 2 ~ "Anfänger:in", term > 2 & term <= 6 ~ "Erfahrene", term > 6 ~ "Langzeit" ) ) table(uni$termg) str(uni$termg) ``` ] -- .pull-right-40[ ``` Anfänger:in Erfahrene Langzeit 93 468 439 ``` ``` chr [1:1000] "Erfahrene" "Erfahrene" "Erfahrene" "Erfahrene" "Langzeit" "Anfänger:in" ... ``` ] --- # Pipes Etwas komplexer wäre folgende Aufgabe: Wir möchten nicht die Abweichung zum Mittelwert des Abiturs in unserer gesamten Erhebung berechnen, sondern die Abweichung zum Mittelwert der einzelnen Universitäten. Damit wir die Gruppen-Mittelwerte angezeigt bekommen, berechnen wir auch eine Variable für den Gruppen-Mittelwert. -- .pull-left-40[ ```r uni <- uni %>% group_by(city) %>% mutate(abigm = mean(abi)) %>% mutate(abid = abi - abigm) %>% ungroup() uni[, c("ID", "abi", "city", "abigm", "abid" ) ] ``` ] -- .pull-right-60[ .center[ ``` # A tibble: 1,000 x 5 ID abi city abigm abid <int> <dbl> <fct> <dbl> <dbl> 1 1 1.6 Frankfurt 2.58 -0.983 2 2 3 Frankfurt 2.58 0.417 3 3 2.1 Marburg 2.51 -0.41 4 4 3.3 Gießen 2.52 0.784 5 5 1 Marburg 2.51 -1.51 6 6 1.1 Marburg 2.51 -1.41 7 7 3.8 Marburg 2.51 1.29 8 8 2 Marburg 2.51 -0.51 9 9 1.3 Marburg 2.51 -1.21 10 10 1.6 Gießen 2.52 -0.916 # ... with 990 more rows ``` ] ] --- # Pipes .pull-left-40[ Alternativ könnten wir die Daten auch hierarchisch nach Standort und Studienfach gruppieren und uns dann einfach die unterschiedlichen Mittelwerte mit **summarise()** ausgeben lassen: -- ```r mCityStudy <- uni %>% group_by(city, study ) %>% summarise(mean(abi)) mCityStudy ``` ] .pull-right-60[ .center[ ``` # A tibble: 12 x 3 # Groups: city [3] city study `mean(abi)` <fct> <fct> <dbl> 1 Gießen Political Science 2.38 2 Gießen Sociology 2.51 3 Gießen Educational Science 2.57 4 Gießen Psychology 2.57 5 Marburg Political Science 2.48 6 Marburg Sociology 2.51 7 Marburg Educational Science 2.49 8 Marburg Psychology 2.56 9 Frankfurt Political Science 2.34 10 Frankfurt Sociology 2.68 11 Frankfurt Educational Science 2.60 12 Frankfurt Psychology 2.71 ``` ] ] --- # Versuchen wir es zusammen zu lösen! Versucht euch mit dem Grundvokabular an folgenden Aufgaben in den Breakout-Rooms oder allein: -- 1. Teile den Datensatz uni in drei Datensätze, die jeweils nur eine Universitätsstadt inkludieren. 2. Berichte die durchschnittliche Semesterzahl pro Uni und Studiengang! 3. Berechne eine Variable, die die Abweichung von der durchschnittlichen Semesterzahl nach Studienfach angibt. --- # Lab Task In der nächsten halbe Stunde sollt ihr euch in Gruppen (Breakout-Rooms) oder einzeln an den folgenden Aufgaben versuchen. Es müssen nicht alle Aufgaben in der Zeit geschafft werden, es geht viel mehr um die Auseinandersetzung mit dem neuen Vokabular. Nutzt dazu den Datensatz `pss` (Panem Social Survey). 1. Filter den Datensatz, so dass ein Subset nur mit Personen aus Distrikt 1 entsteht. Lass dir mit **pipes** jeden 150. Fall anzeigen. 2. Filter den Datensatz, so dass ein Subset entsteht, dass keine Personen aus Distrikt 1 oder Distrikt 5 beinhaltet. Lass dir mit **pipes** die letzten 50 Fälle anzeigen. 3. Filter den Datensatz, so dass ein Subset mit Personen entsteht, die entweder in Distrikt 7 oder nicht in Distrikt 12 leben. Lass dir im Pipen die ersten 15a Fälle anzeigen. 4. Woher kommen die 10 ältesten Personen. 5. Wie stufen sich die 10 jüngsten personen auf der Links-Rechts-Selbsteinschätzung ein. 6. Gruppiere den Datensatz nach Distrikten und lasse dir deskriptive Werte für die Links-Rechts-Selbsteinschätzung ausgeben. 7. Zeigen sich, gruppiert nach Alter (!), deskriptive Differenzen auf der Links-Rechts-Selbsteinschätzung. --- class: inverse2, mline, center, middle # Das wars!