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

INPUT - OUTPUT Workshop R & RStudio

Deel 3

Data manipulatie met dplyr

Sven De Maeyer

22/04/2022

1 / 28

Overzicht

2 / 28

1. Tidyverse

3 / 28

Welkom in het tidyverse

4 / 28

Waarom tidyverse?

  • handig voor beginners

  • consistente benadering voor alles

  • krachtige mogelijkhede met een minimum aan 'effort'

  • geeft vertrouwen om R verder te exploreren

5 / 28

Tibble

In R werken we normaal met een dataframe.

Binnen het tidyverse ecosysteem werken we met een variant: een tibble

Een tibble is eigenlijk een dataframe volgens het tidy data principe

RIASEC
## # A tibble: 6,578 × 100
## R1 R2 R3 R4 R5 R6 R7 R8 I1 I2 I3 I4 I5
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 1 1 1 1 1 2 4 2 2 1
## 2 1 1 1 1 1 1 1 1 4 2 3 2 3
## 3 5 3 1 1 1 1 2 2 4 4 4 2 4
## 4 1 2 1 2 2 3 2 2 4 5 4 4 4
## 5 1 1 5 1 1 2 1 1 4 4 4 4 4
## 6 3 1 1 2 1 2 2 3 3 4 4 2 1
## 7 1 1 1 1 1 1 1 1 3 4 3 1 1
## 8 5 1 1 4 5 1 3 3 3 2 4 4 4
## 9 1 1 1 1 1 1 1 1 3 4 2 3 2
## 10 5 4 2 4 2 3 3 3 5 5 2 5 2
## # … with 6,568 more rows, and 87 more variables: I6 <dbl>, I7 <dbl>, I8 <dbl>,
## # A1 <dbl>, A2 <dbl>, A3 <dbl>, A4 <dbl>, A5 <dbl>, A6 <dbl>, A7 <dbl>,
## # A8 <dbl>, S1 <dbl>, S2 <dbl>, S3 <dbl>, S4 <dbl>, S5 <dbl>, S6 <dbl>,
## # S7 <dbl>, S8 <dbl>, E1 <dbl>, E2 <dbl>, E3 <dbl>, E4 <dbl>, E5 <dbl>,
## # E6 <dbl>, E7 <dbl>, E8 <dbl>, C1 <dbl>, C2 <dbl>, C3 <dbl>, C4 <dbl>,
## # C5 <dbl>, C6 <dbl>, C7 <dbl>, C8 <dbl>, introelapse <dbl>,
## # testelapse <dbl>, surveyelapse <dbl>, TIPI1 <dbl>, TIPI2 <dbl>, …
6 / 28

Wat is tidy data?

Artwork by @allison_horst

7 / 28

Wat is tidy data?

Artwork by @allison_horst

8 / 28

Wat is tidy data?

Artwork by @allison_horst

9 / 28

2. Het dplyr pakket

10 / 28

dplyr ...

is HET pakket om te werken met tidy data !



WERKWOORDEN staan centraal:

  • filter()
  • mutate()
  • select()
  • group_by() + summarise()
  • arrange()
  • rename()
  • relocate()
  • join()
11 / 28

De %>% operator (een 'pipe')


Om functies
aaneen te schakelen

In plaats van

mean(c(1,2,3,4))

of

Getallen <- c(1,2,3,4)
mean(Getallen)

doe je

c(1,2,3,4) %>%
mean( )

Met de %>% kan je volgende zin schrijven:

I %>% woke up %>% took a shower %>% got breakfast %>% took the metro %>% arrived at work %>%

13 / 28

filter()

Artwork by @allison_horst

14 / 28

filter() toegepast

Met de RIASEC data:

We selecteren enkel observaties van mannen uit GB

RIASEC_UK_Male <- RIASEC %>%
filter(country == "GB" & gender == 1)

== staat voor is gelijk aan (let op de 2 = tekens!)

We cleanen de data en weerhouden enkel observaties waarvoor de leeftijd lager is dan 110 en gender niet de onmogelijke code 0 heeft

RIASEC_clean <- RIASEC %>%
filter(age < 110 $ gender != 0)

!= staat voor is niet gelijk aan

15 / 28

mutate()

Artwork by @allison_horst

16 / 28

mutate() toegepast

Met de RIASEC data:

We berekenen scores voor de 6 kerndimensies van het RIASEC model en overschrijven de RIASEC dataset (zo hebben we de kolommen toegevoegd aan de dataset)

RIASEC <- RIASEC %>%
mutate(
Realistic = (R1 + R2 + R3 + R4 + R5 + R6 + R7 + R8)/8,
Investigative = (I1 + I2 + I3 + I4 + I5 + I6 + I7 + I8)/8,
Artistic = (A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8)/8,
Social = (S1 + S2 + S3 + S4 + S5 + S6 + S7 + S8)/8,
Enterprising = (E1 + E2 + E3 + E4 + E5 + E6 + E7 + E8)/8,
Conventional = (C1 + C2 + C3 + C4 + C5 + C6 + C7 + C8)/8
)
17 / 28

mutate() toegepast

Met de RIASEC data:

We zetten de variabele land om in een factor

RIASEC <- RIASEC %>%
mutate(
country_factor = as.factor(country)
)
str(RIASEC$country_factor)
## Factor w/ 3 levels "BE","GB","NL": 3 2 2 2 2 2 1 1 2 2 ...
18 / 28

select() toegepast

Aangeven welke variabelen je wenst te selecteren.

Enkele voorbeelden met de RIASEC data:

We selecteren enkel country, age, gender en dan tonen we de structuur via str()

RIASEC %>%
select(
country, age, gender
) %>%
str()
## tibble [6,578 × 3] (S3: tbl_df/tbl/data.frame)
## $ country: chr [1:6578] "NL" "GB" "GB" "GB" ...
## $ age : num [1:6578] 46 21 20 41 22 34 28 20 52 30 ...
## $ gender : num [1:6578] 2 2 1 2 1 2 2 1 2 1 ...
19 / 28

select() toegepast

We selecteren enkel country, age, gender, en de nieuw berekende variabelen (Realistic tot en met Conventional) en dan tonen we de structuur via str()

RIASEC %>%
select(
country, age, gender, Realistic:Conventional
) %>%
str()
## tibble [6,578 × 9] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:6578] "NL" "GB" "GB" "GB" ...
## $ age : num [1:6578] 46 21 20 41 22 34 28 20 52 30 ...
## $ gender : num [1:6578] 2 2 1 2 1 2 2 1 2 1 ...
## $ Realistic : num [1:6578] 1 1 2 1.88 1.62 ...
## $ Investigative: num [1:6578] 2.25 2.5 3.5 3.88 4 ...
## $ Artistic : num [1:6578] 3.88 4.12 1.62 4 2.62 ...
## $ Social : num [1:6578] 3.62 3.38 1.5 4.25 1 ...
## $ Enterprising : num [1:6578] 1.25 1.5 1.38 2.38 1.75 ...
## $ Conventional : num [1:6578] 1 1 3.5 1.25 1.5 ...
20 / 28

Power combinatie 1: group_by() + summarize( )

  • group_by() zet een tibble om naar een 'gegroepeerde tibble' waarbij alle bewerkingen op groepsniveau gebeuren

  • summarize() om per groep zaken te berekenen

Per land berekenen we de gemiddelde leeftijd en de standaardafwijking

RIASEC %>%
group_by(
country
) %>%
summarize(
mean_age = mean(age),
sd_age = sd(age)
)
## # A tibble: 3 × 3
## country mean_age sd_age
## <chr> <dbl> <dbl>
## 1 BE 28.8 10.6
## 2 GB 34.3 18.9
## 3 NL 29.2 11.9
21 / 28

Power combinatie 1: group_by() + summarize( )

Per combinatie van land en gender berekenen we de gemiddelde leeftijd en de standaardafwijking

RIASEC %>%
group_by(
country, gender
) %>%
summarize(
mean_age = mean(age),
sd_age = sd(age)
)
## # A tibble: 11 × 4
## # Groups: country [3]
## country gender mean_age sd_age
## <chr> <dbl> <dbl> <dbl>
## 1 BE 0 24 NA
## 2 BE 1 30.8 11.7
## 3 BE 2 27.8 9.77
## 4 BE 3 21.7 4.73
## 5 GB 0 45 19.5
## 6 GB 1 36.5 14.0
## 7 GB 2 32.8 13.3
## 8 GB 3 49.3 151.
## 9 NL 1 31.3 12.6
## 10 NL 2 28.0 11.2
## 11 NL 3 19.1 3.85
22 / 28

Power combinatie 2: mutate() + case_when( )

Artwork by @allison_horst

23 / 28

Power combinatie 2: mutate() + case_when( )

We maken een nieuwe variabele age_group met 3 groepen, vervolgens selecteren we enkel de age en age_group om vervolgens enkel de bovenste 5 observaties te tonen...

RIASEC %>%
mutate(
age_group = case_when(
age < 19 ~ 'minderjarig',
age >= 18 & age < 67 ~ 'actieve bevolking',
age >= 67 ~ 'gepensioneerd'
)
) %>%
select(
age,
age_group
) %>%
head(5)
## # A tibble: 5 × 2
## age age_group
## <dbl> <chr>
## 1 46 actieve bevolking
## 2 21 actieve bevolking
## 3 20 actieve bevolking
## 4 41 actieve bevolking
## 5 22 actieve bevolking
24 / 28

Condities definiëren

  • x == y 'x is gelijk aan y'

  • x != y 'x is NIET gelijk aan y'

  • x < y 'x is kleiner dan y'

  • x <= y 'x is kleiner dan of gelijk aan y'

  • x > y 'x is groter dan y'

  • x >= y 'x is groter dan of gelijk aan y'

25 / 28

Boleaanse operatoren

Handig om weten is dat je condities kan combineren!

  • & 'en' bv: gender == 1 & age <=18

  • | 'of' bv: gender == 1 | gender == 2

  • ! 'niet' bv: gender == 1 & !age <=18

26 / 28

Interactieve tutorial over dplyr()

Wil je wat referentiemateriaal en een plek om je skills te oefenen? Deze tutorial (gemaakt met het pakket learnr) is een echte aanrader!

https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome

27 / 28

Oefening dplyr

  • Op Dropbox vind je een document Oefening_dplyr.Rmd

  • Plaats dit document in de RIASEC_project/Output map op je pc

  • Open vervolgens het bestand binnen je R project

  • Het document bevat een set van opdrachten met telkens lege code blokken

  • Bedoeling is dat je de juiste code schrijft (en test door te laten lopen) om deze opdrachten uit te voeren

  • Zit je vast? No Worries!

    • Ik ben er
    • Je hebt elkaar
    • Er is een oplossingssleutel Oefening_dplyr_oplossing.Rmd
28 / 28

Overzicht

2 / 28
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