+ - 0:00:00
Notes for current slide
Notes for next slide

Wrangling

Explorative Datenanalyse mit R
The R Bootcamp

März 2022

1 / 23

Was ist Wrangling?

  • Transformieren

    • Spaltennamen verändern
    • Neue Variablen kreieren
  • Organisieren

    • Sortieren
    • Datensätze zusammenführen
    • Spalten zu Zeilen flippen
  • Aggregieren

    • Datengruppen bilden
    • Statistiken für Gruppen berechnen


2 / 23

2 'dreckige' Datensätze

  • Umbenennen: Intuitive Spaltennamen vergeben.
  • Umkodieren: Angemessene Einheiten und Datenlabels vergeben.
  • Verbinden: Datensätze zusammenführen.
  • Sortieren: Datensatz ordnen.
  • Filtern: Relevante Fälle auswählen.
  • Auswählen: Relevante Variablen auswählen.


patienten
## # A tibble: 5 × 3
## id X1 X2
## <dbl> <dbl> <dbl>
## 1 1 37 1
## 2 2 65 2
## 3 3 57 2
## 4 4 34 1
## 5 5 45 2
ergebnisse
## # A tibble: 5 × 3
## id t_1 t_2
## <dbl> <dbl> <dbl>
## 1 4 100 105
## 2 92 134 150
## 3 1 123 135
## 4 2 143 140
## 5 99 102 68
3 / 23

Das tidyverse

  • Das tidyverse ist eine Sammlung hoch-performanter, nutzerfreundlicher Pakete für eine effiziente Datenaufbereitung und -analyse.
  1. readr für Daten I/O.
  2. tibble für moderne data_frame's.
  3. dplyr für Datenverarbeitung.
  4. tidyr für Datenverarbeitung.
  5. ggplot2 für Grafiken.
4 / 23

%>%

  • Der präferierte Gebrauch von dplyr beinhaltet einen neuen Operator, die Pipe %>%.



from wikimedia.org

# Numerischer Vektor
score <- c(8, 4, 6, 3, 7, 3)
score
## [1] 8 4 6 3 7 3
# Mittelwert: Base-R-style
mean(score)
## [1] 5.167
# Mittelwert: dplyr-style
score %>%
mean()
## [1] 5.167
5 / 23

%>%

  • Der präferierte Gebrauch von dplyr beinhaltet einen neuen Operator, die Pipe %>%.



from wikimedia.org

6 / 23

Transformation

  • Umbenennen: Intuitive Spaltennamen vergeben.

    • rename()
  • Umkodieren: Angemessene Einheiten und Datenlabels vergeben.

    • mutate()
    • case_when()
  • Verbinden: Datensätze zusammenführen.

    • left_join()


patienten
## # A tibble: 5 × 3
## id X1 X2
## <dbl> <dbl> <dbl>
## 1 1 37 1
## 2 2 65 2
## 3 3 57 2
## 4 4 34 1
## 5 5 45 2
ergebnisse
## # A tibble: 5 × 3
## id t_1 t_2
## <dbl> <dbl> <dbl>
## 1 4 100 105
## 2 92 134 150
## 3 1 123 135
## 4 2 143 140
## 5 99 102 68
7 / 23

rename()

TIBBLE %>%
rename(NEU = ALT,
NEU = ALT)
# Starte mit Datensatz
patienten %>%
# Ändere Spaltennamen
rename(alter = X1,
bedingung = X2)
## # A tibble: 5 × 3
## id alter bedingung
## <dbl> <dbl> <dbl>
## 1 1 37 1
## 2 2 65 2
## 3 3 57 2
## 4 4 34 1
## 5 5 45 2
8 / 23

mutate()

TIBBLE %>%
mutate(
NAME1 = DEFINITION1,
NAME2 = DEFINITION2,
NAME3 = DEFINITION3,
...
)
patienten %>%
rename(alter = X1,
bedingung = X2) %>%
# Kreiere neue Variablen
mutate(monate = alter * 12,
dekaden = alter / 10)
## # A tibble: 5 × 5
## id alter bedingung monate dekaden
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 37 1 444 3.7
## 2 2 65 2 780 6.5
## 3 3 57 2 684 5.7
## 4 4 34 1 408 3.4
## 5 5 45 2 540 4.5
9 / 23

case_when()

TIBBLE %>%
mutate(
NAME = case_when(
LOGICAL1 ~ WERT1,
LOGICAL2 ~ WERT2,
...
)
)
patienten %>%
rename(alter = X1,
bedingung = X2) %>%
# Kreiere bed_label von bedingung
mutate(bed_label = case_when(
bedingung == 1 ~ "placebo",
bedingung == 2 ~ "medikament"))
## # A tibble: 5 × 4
## id alter bedingung bed_label
## <dbl> <dbl> <dbl> <chr>
## 1 1 37 1 placebo
## 2 2 65 2 medikament
## 3 3 57 2 medikament
## 4 4 34 1 placebo
## 5 5 45 2 medikament
10 / 23

inner_join()

TIBBLE1 %>%
inner_join(TIBBLE2,
by = c("KEY"))
patienten %>%
rename(alter = X1, bedingung = X2) %>%
mutate(bed_label = case_when(
bedingung == 1 ~ "placebo",
bedingung == 2 ~ "medikament")) %>%
# Verbinde mit ergebnisse
inner_join(ergebnisse, by = "id")
## # A tibble: 3 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 1 37 1 placebo 123 135
## 2 2 65 2 medikament 143 140
## 3 4 34 1 placebo 100 105
12 / 23

left_join()

TIBBLE1 %>%
left_join(TIBBLE2,
by = c("KEY"))
patienten %>%
rename(alter = X1, bedingung = X2) %>%
mutate(bed_label = case_when(
bedingung == 1 ~ "placebo",
bedingung == 2 ~ "medikament")) %>%
# Verbinde mit ergebnisse
left_join(ergebnisse, by = "id")
## # A tibble: 5 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 1 37 1 placebo 123 135
## 2 2 65 2 medikament 143 140
## 3 3 57 2 medikament NA NA
## 4 4 34 1 placebo 100 105
## 5 5 45 2 medikament NA NA
13 / 23

Organisation

  • Sortieren: Datensatz ordnen.

    • arrange()
  • Filtern: Relevante Fälle auswählen.

    • slice()
    • filter()
  • Auswählen: Relevante Variablen auswählen.

    • select()
# Verbundener tibble
patienten_ergebnisse
## # A tibble: 5 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 1 37 1 placebo 123 135
## 2 2 65 2 medikament 143 140
## 3 3 57 2 medikament NA NA
## 4 4 34 1 placebo 100 105
## 5 5 45 2 medikament NA NA
14 / 23

arrange()

# Sortiere aufsteigend
TIBBLE %>%
arrange(VAR1, VAR2)
# Sortiere absteigend (mit desc())
TIBBLE %>%
arrange(desc(VAR1), VAR2)
patienten_ergebnisse %>%
# Sortiere nach bedingung
arrange(bedingung)
## # A tibble: 5 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 1 37 1 placebo 123 135
## 2 4 34 1 placebo 100 105
## 3 2 65 2 medikament 143 140
## 4 3 57 2 medikament NA NA
## 5 5 45 2 medikament NA NA
15 / 23

arrange()

# Sortiere aufsteigend
TIBBLE %>%
arrange(VAR1, VAR2)
# Sortiere absteigend (mit desc())
TIBBLE %>%
arrange(desc(VAR1), VAR2)
patienten_ergebnisse %>%
# Sortiere nach beidem
arrange(bedingung, alter)
## # A tibble: 5 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 4 34 1 placebo 100 105
## 2 1 37 1 placebo 123 135
## 3 5 45 2 medikament NA NA
## 4 3 57 2 medikament NA NA
## 5 2 65 2 medikament 143 140
16 / 23

slice()

# Slice mit Sequenz
TIBBLE %>%
slice(INDEX_START:INDEX_STOP)
# Slice mit Vektor
TIBBLE %>%
slice(c(INDEX1, INDEX2, ...))
patienten_ergebnisse %>%
arrange(bedingung, alter) %>%
# Zeilen 3 und 5
slice(c(3, 5))
## # A tibble: 2 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 5 45 2 medikament NA NA
## 2 2 65 2 medikament 143 140
17 / 23

slice()

# Slice mit Sequenz
TIBBLE %>%
slice(INDEX_START:INDEX_STOP)
# Slice mit Vektor
TIBBLE %>%
slice(c(INDEX1, INDEX2, ...))
patienten_ergebnisse %>%
arrange(bedingung, alter) %>%
# Erste 4 Zeilen
slice(1:4)
## # A tibble: 4 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 4 34 1 placebo 100 105
## 2 1 37 1 placebo 123 135
## 3 5 45 2 medikament NA NA
## 4 3 57 2 medikament NA NA
18 / 23

filter()

# Filter mit logische Vergleichen
TIBBLE %>%
filter(VAR1 == WERT1,
VAR2 > WERT2,
VAR3 < WERT3,
VAR4 == WERT4 | VAR5 < WERT5)
patienten_ergebnisse %>%
# Patienten mit alter > 35
filter(alter > 35)
## # A tibble: 4 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 1 37 1 placebo 123 135
## 2 2 65 2 medikament 143 140
## 3 3 57 2 medikament NA NA
## 4 5 45 2 medikament NA NA
19 / 23

filter()

# Filter mit logische Vergleichen
TIBBLE %>%
filter(VAR1 == WERT1,
VAR2 > WERT2,
VAR3 < WERT3,
VAR4 == WERT4 | VAR5 < WERT5)
# alter grösser 35 & bed_label ist medikament
patienten_ergebnisse %>%
filter(alter > 35,
bed_label == "medikament")
## # A tibble: 3 × 6
## id alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 2 65 2 medikament 143 140
## 2 3 57 2 medikament NA NA
## 3 5 45 2 medikament NA NA
20 / 23

select()

# Wähle Variablen A und B aus
TIBBLE %>%
select(VAR1, VAR2)
# Wähle alles ausser A aus
TIBBLE %>%
select(-VAR1)
patienten_ergebnisse %>%
# Wähle id und bedingung aus
select(id, bedingung)
## # A tibble: 5 × 2
## id bedingung
## <dbl> <dbl>
## 1 1 1
## 2 2 2
## 3 3 2
## 4 4 1
## 5 5 2
21 / 23

select()

# Wähle Variablen A und B aus
TIBBLE %>%
select(VAR1, VAR2)
# Wähle alles ausser A aus
TIBBLE %>%
select(-VAR1)
patienten_ergebnisse %>%
# Alles ausser id
select(-id)
## # A tibble: 5 × 5
## alter bedingung bed_label t_1 t_2
## <dbl> <dbl> <chr> <dbl> <dbl>
## 1 37 1 placebo 123 135
## 2 65 2 medikament 143 140
## 3 57 2 medikament NA NA
## 4 34 1 placebo 100 105
## 5 45 2 medikament NA NA
22 / 23

Was ist Wrangling?

  • Transformieren

    • Spaltennamen verändern
    • Neue Variablen kreieren
  • Organisieren

    • Sortieren
    • Datensätze zusammenführen
    • Spalten zu Zeilen flippen
  • Aggregieren

    • Datengruppen bilden
    • Statistiken für Gruppen berechnen


2 / 23
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow