Daten manipulieren
Nun haben wir unsere Daten betrachtet und ordentlich formatiert. Nachfolgend können wir mit der Datenmanipulation beginnen, indem wir zum Beispiel noch neue Variablen hinzufügen, welche wir gerne analysieren wollen oder den Datensatz nach unseren Wünschen filtern und ordnen.
Das Package dplyr
Das Package dplyr gehört zum sogenannten tidyverse. Hierbei handelt es sich um eine Sammlung von Packages um den Umgang mit Daten zu erleichtern. Neben Packages zum Laden von Daten (readr) oder zur Neustrukturierung von Tabellen (tidyr) findet man auch Packages zur fortgeschrittenen Visualisierung von Daten (ggplot2). dplyr ist dabei ein Package was zum Filtern, Ordnen und Verrechnen von Daten entwickelt wurde. Wir wollen uns nun die wichtigsten Funktionen einmal anschauen.
dplyr installieren
Zuerst müssen wir das Package installieren. Entweder ihr nutzt Tools - Install Packages und gebt den Namen ein oder ihr installiert das Package über geschriebenen Code (install.packages(“dplyr”)). Nachfolgend müsst ihr das Paket noch laden, damit wir es verwenden können. Hierzu nutzen wir die library()-Funktion.
library(dplyr)
Daten filtern
Eine Möglichkeit ein Datenset zu filtern haben wir bereits mit der subset()-Funktion kennengelernt:
subset(Data, Verkauf >= 100)
## Globaler.Rang Firmenname Verkauf Profit Vermögen Martkwert
## 1 14 Volkswagen Group 254.0 28.6 408.2 94.4
## 2 25 Allianz 140.3 6.8 915.8 66.4
## 3 36 Daimler 150.8 8.0 211.9 64.1
## 4 51 Siemens 100.6 5.7 134.4 91.9
## 6 69 BASF 103.9 6.4 83.5 90.1
## 8 99 E.ON 174.2 2.9 184.9 32.5
Mit dplyr ist die Syntax etwas anders. Hier schreiben wir zuerst den Namen des Datasets und nutzen dann den sogenannten Pipe-Operator %>%. Man kann diesen Operator übersetzen mit “und dann mache …”. Mithilfe des Pipe-Operators können wir verschiedenen Funktionen des dplyr-Paketes verknüpfen. Zuerst wollen wir, ähnlich der subset()-Funktion die Daten filtern.
Data %>% filter(Verkauf >= 100)
## Globaler.Rang Firmenname Verkauf Profit Vermögen Martkwert
## 1 14 Volkswagen Group 254.0 28.6 408.2 94.4
## 2 25 Allianz 140.3 6.8 915.8 66.4
## 3 36 Daimler 150.8 8.0 211.9 64.1
## 4 51 Siemens 100.6 5.7 134.4 91.9
## 5 69 BASF 103.9 6.4 83.5 90.1
## 6 99 E.ON 174.2 2.9 184.9 32.5
Wir erhalten, wie erwartet, das gleiche Ergebnis wie unter Nutzung von subset(). Genauso können wir auch mehrere Kriterien der Filterung kombinieren.
Data %>% filter(Verkauf >= 100 & Globaler.Rang <= 40)
## Globaler.Rang Firmenname Verkauf Profit Vermögen Martkwert
## 1 14 Volkswagen Group 254.0 28.6 408.2 94.4
## 2 25 Allianz 140.3 6.8 915.8 66.4
## 3 36 Daimler 150.8 8.0 211.9 64.1
Daten ordnen
Nachdem wir unsere Daten gefiltert haben, können wir Diese ordnen. Hierzu nutzen wir die arrange()-Funktion aus dem dplyr-Package. Wir wollen die gefilterten Firmen nach der Verkaufssumme aufsteigend sortieren.
Data %>% filter(Verkauf >= 100) %>% arrange(Verkauf)
## Globaler.Rang Firmenname Verkauf Profit Vermögen Martkwert
## 1 51 Siemens 100.6 5.7 134.4 91.9
## 2 69 BASF 103.9 6.4 83.5 90.1
## 3 25 Allianz 140.3 6.8 915.8 66.4
## 4 36 Daimler 150.8 8.0 211.9 64.1
## 5 99 E.ON 174.2 2.9 184.9 32.5
## 6 14 Volkswagen Group 254.0 28.6 408.2 94.4
Das Ganze kann man natürlich auch absteigend sortieren.
Data %>% filter(Verkauf >= 100) %>% arrange(desc(Verkauf))
## Globaler.Rang Firmenname Verkauf Profit Vermögen Martkwert
## 1 14 Volkswagen Group 254.0 28.6 408.2 94.4
## 2 99 E.ON 174.2 2.9 184.9 32.5
## 3 36 Daimler 150.8 8.0 211.9 64.1
## 4 25 Allianz 140.3 6.8 915.8 66.4
## 5 69 BASF 103.9 6.4 83.5 90.1
## 6 51 Siemens 100.6 5.7 134.4 91.9
Daten auswählen
Unter Nutzung der select()-Funktionen können wir aus diesen Daten jetzt spezielle Aspekte, z.B. eine bestimmte Variable auswählen.
Data %>% filter(Verkauf >= 100) %>% arrange(Verkauf) %>% select(Vermögen)
## Vermögen
## 1 134.4
## 2 83.5
## 3 915.8
## 4 211.9
## 5 184.9
## 6 408.2
Neue Variablen erstellen bzw. berechnen
Nicht selten möchte man neue Kennzahlen oder prozentuale Anteile berechnen. Hierzu kann man komfortabel die mutate()-Funktion aus den dplyr-Package nutzen, um ganze Spalten miteinander zu verrechnen. Wir wollen in unserem Beispiel den prozentualen Anteil des Profits an den Verkaufszahlen berechnen. Die neu erstellte Variable wird einfach als erstes Argument an die mutate()-Funktion übergeben, dann folgt ein = und nachfolgen die gewünschte Formel. R hängt dann die neue Variable automatisch an die Tabellen hinten an. Zur Übersichtlichkeit nutzen wir die head()-Funktion um uns nur die ersten 6 Zeilen auszugeben und wollen durch Nutzung der select()-Funktion nur den Firmenname und den Profitanteil in Prozent ausgegeben haben.
head(Data %>% mutate(Profit.Prozent = Profit/Verkauf) %>% select(Firmenname, Profit.Prozent))
## Firmenname Profit.Prozent
## 1 Volkswagen Group 0.11259843
## 2 Allianz 0.04846757
## 3 Daimler 0.05305040
## 4 Siemens 0.05666004
## 5 BMW Group 0.06680162
## 6 BASF 0.06159769
Nachfolgend können wir das auch noch einmal absteigen sortieren.
head(Data %>% mutate(Profit.Prozent = Profit/Verkauf) %>%
select(Firmenname, Profit.Prozent) %>% arrange(desc(Profit.Prozent)))
## Firmenname Profit.Prozent
## 1 Porsche Automobil Holding 1.9807692
## 2 Deutsche Boerse 0.2857143
## 3 K+S 0.1764706
## 4 SAP 0.1722488
## 5 Hugo Boss 0.1333333
## 6 ProSiebenSat1 Media 0.1333333
Wenn ihr Code auf die nächste Zeile schreiben wollt, dann achtet darauf, das ihr Enter immer nach dem Pipe-Operator drückt. Sonst kann es Probleme beim Ausführen des Codes geben.
Level einer kategorialen Variable anzeigen
Nicht selten arbeiten wir in der Medizin mit kategorialen Variablen wie Geschlecht (Mann, Frau, Divers) oder anderen Gruppen (vor Medikamentengabe/nach Medikamentengabe oder Placebogruppe/Verumgruppe, etc.). Um uns die Level einer kategorialen Variable ausgeben zu lassen, können wir die distinct()-Funktion des dplyr-Package nutzen. Da unser bisherig verwendeter Datensatz keine kategorialen Daten enthält, nutze ich zur Demonstration einen frei im Internet verfügbaren Brustkrebsdatensatz. Der Datensatz bseitzt 268 Zeilen, sodass wir wieder die head()-Funktion nutzen.
Brustkrebs <- read.csv("Brustkrebs.csv")
head(Brustkrebs)
## age menopause tumor.size inv.nodes node.caps deg.malig breast breast.quad
## 1 40-49 premeno 15-19 0-2 yes 3 right left_up
## 2 50-59 ge40 15-19 0-2 no 1 right central
## 3 50-59 ge40 35-39 0-2 no 2 left left_low
## 4 40-49 premeno 35-39 0-2 yes 3 right left_low
## 5 40-49 premeno 30-34 3-5 yes 2 left right_up
## 6 50-59 premeno 25-29 3-5 no 2 right left_up
## irradiat Class
## 1 no recurrence-events
## 2 no no-recurrence-events
## 3 no recurrence-events
## 4 yes no-recurrence-events
## 5 no recurrence-events
## 6 yes no-recurrence-events
Wir wollen nun wissen, wieviele Level die Variable “inv.nodes” besitzt.
Brustkrebs %>% distinct(inv.nodes)
## inv.nodes
## 1 0-2
## 2 3-5
## 3 15-17
## 4 6-8
## 5 9-11
## 6 24-26
## 7 12-14
Nun zeigt uns R die verschiedenen Level der Variable an. Würden wir also andere Variablen dieses Datensatzen in Bezug auf die invasiven Lymphknoten analysieren, so müssten wir 7 verschiedene Gruppen vergleichen. Es ist wichtig zu wissen, wieviele Gruppen man vergleicht, da man je nachdem andere statistische Test auswählen muss.