Daten manipulieren


Zurück
R – Einführung
8:32
Download von R
2:11
Erste Schritte und Rechenregeln in R
8:53
Klassische Rechenoperationen in R
4:33
Spezielle Rechenoperationen – Logarithmus
7:02
Boolesche Operatoren
4:25
Variablen
5:13
Vektor-Indexierung
4:12
Runden
3:50
Datentypen
5:42
Datenformen
3:23
Samples
4:24
Subset
5:43
dat-Dateien laden
0:45
Umgang mit Vektoren
5:45
Umgang mit Vektoren – Details
3:10
CBIND & RBIND
2:54
Zahlenreihen
7:19
Dataframe-Indexierung
5:10
Überblick verschaffen
7:23
Datensatz vorbereiten
5:51
Daten manipulieren
8:45
Deskriptive Statistik – Grundlagen
7:45
Deskriptive Statistik – Mittelwert und Co.
5:00
Grundlagen der Visualisierung
10:02
Histogramme
8:30
Boxplot
7:12
Scatterplot
5:47
Plots kombinieren
9:38
weitere Visualisierungen
3:05

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.

Skripte, Audio (Stream & Download)
Bitte melde dich an, um diesen Inhalt zu sehen.,
Login | Jetzt registrieren