Dplyr: Introduksjon

Dplyr er en av de viktigste pakkene for R. Pakken ble laget av Hadley Wickham, som også har laget ggplot2, tidyr, lubridate og mange flere. Dplyr inneholder en lang rekke funksjoner som forenkler i prinsippet all bearbeiding av data.

Funksjoner i base R (grunninstallasjonen av R) kan håndtere mange av funksjonene som inngår i dplyr. I base R finnes funksjoner som split(), subset(), sapply(), lapply(), tapply() og aggregate(), men disse funksjonene er vanskelige å bruke og kan heller ikke kombineres på en naturlig måte med andre funksjoner i tidyverse. Dplyr er lett å arbeide med og kan dessuten kombineres med funksjoner i hundrevis av andre viktige R-pakker. Faktisk blir stadig flere pakker utviklet og tilpasset for å kunne brukes sammen med dplyr. Dplyr inngår i tidyverse, som inneholder mange flere viktige pakker (for eksempel ggplot2).

Funksjonene i dplyr er ikke bare enklere å bruke sammenlignet med base R, de er også mer effektive (de bruker mindre arbeidsminne og er som regel raskere).

Alle funksjoner i dplyr er utformet for å brukes på dataframes (se tidligere diskusjon). En dataframe er en rektangulær tabell med rader og kolonner. I nesten alle tilfeller utgjør radene observasjoner og kolonnene variabler (måleverdier som beskriver observasjonene).

I dette kapittelet vil alle funksjonene i dplyr bli demonstrert. Blant disse funksjonene finner vi for eksempel:

  • filter() - velg variabler/tilfeller basert på verdien deres
  • mutate() - legger til en ny variabel som er en funksjon av eksisterende variabler
  • select() - velg variabler basert på navnet deres
  • arrange() - endre rekkefølgen på rader i en data frame
  • rename() - gi variabler nytt navn
  • slice() - velger variabler basert på posisjonen deres
  • summarise() - oppsummerer flere variabler til én oppsummert variabel
  • group_by() - utfør funksjonene dine på en bestemt gruppe individer i datafilen din
  • across() - bruk én eller flere funksjoner på en bestemt gruppe variabler
  • if_else() - lager en ny variabel basert på ulike påstander som kan være oppfylt
  • row_number() - bruk radnummer for å legge til en kolonne som inneholder informasjon om radnummer
  • rowwise() - utfør funksjonene dine på en gruppe rader (observasjoner)
  • distinct() - velg ut rader med unike verdier for én eller flere variabler i datafilen din

Installere dplyr

Dplyr inngår i det mer omfattende rammeverket tidyverse og kan derfor installeres med følgende kommando:

install.packages("tidyverse", dependencies = T)

Aktivering av tidyverse vil føre til aktivering av følgende pakker: dplyr, ggplot2, forcats, tibble, tidyr, stringr, purr, readr:

library(tidyverse)
── Attaching packages ─────────────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0      ✔ purrr   0.3.4
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.2.0      ✔ stringr 1.4.1
✔ readr   2.1.2      ✔ forcats 0.5.1
── Conflicts ────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()

Som det fremgår av utskriften ovenfor, er pakkene nå aktivert. I pakken ggplot2 finnes mpg-data, som vi nå aktiverer med følgende kommando:

## Aktiver mpg-data
data(mpg)

## Vis de første 5 radene
head(mpg)
## A tibble: 6 × 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

Grupperte funksjoner med group_by()

Med funksjonen group_by() kan du tvinge dplyr til å utføre hver funksjon separat i ulike grupper i dataframen din. Vi kommer til å bruke group_by() i mange eksempler for å demonstrere dette.

Pipe-operatoren (pipe): |>

Styrken i dplyr er muligheten til å kjede sammen operasjoner (hendelser). I dplyr kan vi utføre operasjoner sekvensielt ved hjelp av pipe, som har tegnet |>. Tidligere ble %>% brukt som pipe-operator, men siden 2021 er dette endret til |>. Hurtigtasten for pipe er **Cmd+Shift+M** på Mac og Ctrl + Shift + M på Windows og Linux.

Pipe er magisk! Pipe tar nemlig resultatet av hver operasjon og sender det videre som første argument i neste operasjon. Et eksempel på dette følger, med kommentarer nedenfor:

mpg |>
  select(displ, cty, cyl) |>
  mutate(ny_variabel = displ*cyl)
  • På linje 1 starter vi med mpg-data, som vi sender videre til linje 2 med |>.
  • På linje 2 velger vi å beholde tre kolonner: displ, cty og cyl. Resultatet blir en ny dataframe som bare inneholder disse tre variablene. Denne dataframen sendes videre som første argument på linje 3.
  • På linje 3 brukes mutate() for å lage variabelen ny_variabel, som er produktet av displ og cyl.

Dermed brukes pipe (|>) for å kjede sammen operasjoner med dplyr.