Daten verarbeiten in R

R programmierung

Daten verarbeiten in R mit dem Paket dplyr

Marc Jekel true
05-03-2021

Daten manipulieren mit dplyr

Daten zu verarbeiten nimmt einen Hauptteil einer Datenanalyse ein. In R gibt es mit dem Package “dplyr” ein mächtiges Werkzeug, das uns erlaubt, mit wenigen Befehlen Daten zu selegieren, zu filtern, unterschiedlich anzuordnern und zu verrechnen. Das Paket wird auf dieser Webseite umfassend beschrieben, dort finde man auch ein gutes Cheat-Sheet.

Im Folgenden werden einige Befehle aus dem Paket demonstriert. Abschließend wird die Verarbeitung von Daten mit dplyr im Kontext einer Fallstudie demonstriert.

Struktur der Befehle

Ein Objekt in R wird mit dplyr auf eine bestimmte Art verarbeitet. Zuerst wird das Objekt genannt, dann wird mit den Zeichen “%>%” die Verarbeitung mit dplyr angekündigt, dann folgt der spezifische Verarbeitungsbefehl (s.u.).

Wir generieren einen Datensatz, mit dem wir die Befehle durchprobieren. Nehmen wir an, 100 Probanden haben 10 Items in einem Test entweder gelöst (= 1) oder nicht gelöst (= 0). Die Hälfte der Probanden haben jeweils ein anderes Lernprogramm absolviert. Unser simulierter Datensatz hat somit 11 Spalten (= 10 Items und Gruppenzuordnung) und 100 Zeilen (= 100 Probanden).

Item_1 Item_2 Item_3 Item_4 Item_5 Item_6 Item_7 Item_8 Item_9 Item_10 Gruppe
0 0 1 0 1 1 0 0 0 0 g1
0 0 0 1 0 1 1 0 0 0 g1
1 0 1 0 0 1 0 0 0 0 g1
1 1 0 0 1 0 1 0 1 0 g1
0 0 0 1 0 1 0 1 0 0 g1
1 1 0 1 1 1 0 0 1 0 g1
1 1 1 1 1 1 1 1 1 0 g1
0 0 0 0 1 0 0 1 0 1 g1
0 1 1 1 1 1 0 0 0 0 g1
1 0 1 0 1 1 1 0 1 0 g1
1 0 1 1 0 1 0 1 0 0 g1
0 0 0 0 0 0 0 0 1 1 g1
1 0 1 0 0 1 1 0 0 0 g1
1 0 1 1 0 0 1 1 0 0 g1
1 1 0 1 1 1 1 0 1 1 g1
0 1 0 1 0 0 0 0 1 1 g1
0 0 0 0 1 1 0 1 0 1 g1
1 1 0 0 1 0 0 1 1 1 g1
1 1 0 1 0 0 0 1 0 0 g1
1 1 1 1 1 1 0 1 0 0 g1
0 0 0 1 0 1 1 0 0 0 g1
0 0 1 1 0 1 1 1 1 1 g1
1 0 1 1 0 1 0 1 0 1 g1
0 0 1 1 0 0 0 1 0 0 g1
1 1 1 0 1 0 1 1 1 1 g1
1 1 0 1 0 1 0 1 0 0 g1
1 0 0 0 1 0 0 1 1 0 g1
1 1 0 1 0 1 1 0 0 0 g1
1 0 1 0 1 1 0 1 0 1 g1
0 0 0 0 0 0 0 1 0 1 g1
1 1 0 1 1 1 1 0 0 1 g1
1 1 0 1 1 1 0 0 0 1 g1
0 1 0 0 1 0 1 0 1 0 g1
1 0 1 1 0 0 1 0 1 0 g1
1 1 0 0 1 0 0 0 0 1 g1
1 1 0 1 0 0 0 1 1 1 g1
0 0 0 1 1 0 0 0 1 1 g1
0 0 0 1 1 1 0 0 1 0 g1
0 1 0 1 0 1 1 0 0 1 g1
0 1 0 0 1 1 0 0 1 1 g1
1 0 0 0 1 0 0 0 0 1 g1
0 1 1 0 1 0 1 0 1 0 g1
1 0 1 1 1 1 0 1 0 1 g1
1 0 1 0 1 0 0 1 0 0 g1
0 0 0 1 1 0 1 1 0 1 g1
1 1 0 1 1 0 1 1 1 1 g1
0 1 0 0 0 1 1 1 0 0 g1
1 0 0 1 0 0 0 1 1 1 g1
0 1 0 1 1 1 1 0 1 0 g1
0 1 1 1 0 1 1 1 0 1 g1
0 0 1 0 1 1 0 1 0 0 g2
1 0 1 1 1 1 1 1 0 0 g2
0 1 1 0 0 1 1 0 1 0 g2
0 1 0 0 0 0 0 0 0 1 g2
0 1 1 0 1 0 0 1 0 0 g2
1 1 1 0 0 0 1 1 0 0 g2
0 0 0 0 0 0 0 1 1 0 g2
1 0 1 0 0 0 0 1 0 1 g2
0 1 1 0 1 1 1 1 0 0 g2
1 1 0 0 1 1 1 0 1 1 g2
0 0 0 0 1 1 0 0 1 1 g2
0 0 0 1 0 0 1 1 1 0 g2
1 1 1 0 0 1 1 0 0 1 g2
0 0 0 0 1 0 0 1 1 0 g2
1 1 1 1 0 0 0 1 0 1 g2
1 1 1 1 0 0 0 0 0 0 g2
0 1 0 0 0 1 0 0 1 0 g2
0 1 0 0 0 1 1 1 1 0 g2
0 0 1 0 1 0 1 0 0 0 g2
1 0 1 0 1 0 0 0 0 1 g2
0 1 0 1 0 1 1 1 0 1 g2
1 0 1 1 0 1 0 0 1 1 g2
1 1 1 0 1 1 1 0 1 1 g2
0 1 1 0 0 1 0 0 1 0 g2
0 1 0 1 0 1 1 1 0 0 g2
0 1 0 1 0 1 0 0 0 0 g2
0 1 0 1 0 0 1 1 1 0 g2
0 1 1 0 0 1 1 1 1 1 g2
1 1 0 0 1 0 0 0 1 0 g2
0 0 1 1 1 0 1 1 0 1 g2
1 1 1 0 1 0 0 0 1 0 g2
1 0 1 0 1 0 0 0 0 0 g2
1 1 1 0 0 0 0 0 1 1 g2
1 1 0 1 0 0 1 1 0 0 g2
1 0 0 0 0 1 0 1 1 1 g2
0 0 1 0 0 0 1 0 0 1 g2
0 1 0 0 0 0 0 0 1 0 g2
0 0 0 0 0 0 1 1 0 1 g2
0 1 1 0 1 0 1 1 0 1 g2
0 0 0 1 1 1 0 1 1 0 g2
1 0 0 0 1 1 0 1 0 1 g2
1 1 1 0 0 1 0 1 0 0 g2
0 0 1 0 1 0 1 0 0 1 g2
1 0 0 0 1 0 1 0 1 0 g2
1 1 1 0 0 0 0 0 1 1 g2
1 1 0 1 0 0 1 1 1 0 g2
1 0 1 1 0 1 0 0 0 1 g2
0 1 0 0 1 1 1 1 1 1 g2
0 0 1 0 1 0 1 1 0 1 g2
1 0 1 0 0 1 1 0 0 0 g2

Um in den folgenden Demos das Paket dplyr nutzen zu können, müssen wir es einmal in den Arbeitsspeicher laden.

Mutate

Wenn wir den Gesamtscore über alle Items berechnen möchten, können wir den Befehl mutate() verwenden.

dats_with_sum = dats %>% mutate(Summe_items = Item_1 + Item_2 + Item_3 +
                                  Item_4 + Item_5 + Item_6 + Item_7 +
                                  Item_8 + Item_9 + Item_10)


head(dats_with_sum)
  Item_1 Item_2 Item_3 Item_4 Item_5 Item_6 Item_7 Item_8 Item_9
1      0      0      1      0      1      1      0      0      0
2      0      0      0      1      0      1      1      0      0
3      1      0      1      0      0      1      0      0      0
4      1      1      0      0      1      0      1      0      1
5      0      0      0      1      0      1      0      1      0
6      1      1      0      1      1      1      0      0      1
  Item_10 Gruppe Summe_items
1       0     g1           3
2       0     g1           3
3       0     g1           3
4       0     g1           5
5       0     g1           3
6       0     g1           6

Select (Spalten)

Wenn wir nur noch mit der Gruppenvariable und den Gesamtscore rechnen möchten, können wir die Spalten mit dem Befehl select() selegieren.

dats_with_sum_sub = dats_with_sum %>% select(Gruppe,Summe_items)

head(dats_with_sum_sub)
  Gruppe Summe_items
1     g1           3
2     g1           3
3     g1           3
4     g1           5
5     g1           3
6     g1           6

Filter (Zeilen)

Wenn wir uns nur die Probanden der Gruppe 1 anschauen möchten, können wir die Zeilen mit dem Befehl filter() filtern.

dats_with_sum_sub_filter = dats_with_sum_sub %>% filter(Gruppe == "g1")

dim(dats_with_sum_sub_filter)
[1] 50  2

Arrange

Wenn wir die Daten in der Reihenfolge der Punktsumme sortieren möchten, könnenw ir den Befehl arrange() verwenden.

dats_with_sum_sub_arrange = dats_with_sum_sub %>% arrange(desc(Summe_items))

dats_with_sum_sub_arrange[1:15,]
   Gruppe Summe_items
1      g1           9
2      g1           8
3      g1           8
4      g1           8
5      g2           8
6      g1           7
7      g1           7
8      g1           7
9      g1           7
10     g1           7
11     g2           7
12     g2           7
13     g2           7
14     g2           7
15     g1           6

Deskriptive Statistik: Group_by und Summarise

Deskriptive Statistik kann über den group_by() und summarise() Befehl umgesetzt werden.

dats_with_sum_sub_arrange %>% group_by(Gruppe) %>% 
  summarise(Mittelwert = mean(Summe_items),
            Streuung = sd(Summe_items),
            Median = median(Summe_items))
# A tibble: 2 x 4
  Gruppe Mittelwert Streuung Median
  <fct>       <dbl>    <dbl>  <dbl>
1 g1           4.96     1.64      5
2 g2           4.68     1.39      5

Fallstudie