Tidyverse syntax

Authors

Mattias Villani

Matias Quiroz

Den här sidan samlar lite kommandon i den s k tidyverse dialekten av R.

Introduktion

Tidyverse är en samling R-paket som delar på samma underliggande filosofi. När man väl lärt sig Tidyverse-filosofin, är paketen väldigt kraftfulla. Men eftersom det tar sin tid att lära sig Tidyverse så använder vi inte dessa paket på den här grundkursen. För att stilla nyfikenheten bland programmeringintresserade studenter kommer vi då och då länka till motsvarande kod i Tidyverse genom att visa den här ikonen i marginalen:

Klickar man på den ikonen får man se motsvarande kod från ett eller flera av de olika Tidyverse-paketen, t ex

Speciellt värt att notera bland dessa paket är ggplot2 som, trots sitt knepiga namn, är ett mycket användbart paket för diagram och visualisering. Se ggplot2 cheat sheet för kommandon.

Den s k pipe-operatorn %>% gör att Tidyverse-kod byggs upp på annats sätt än standard R. Pipe-operatorn skickar vidare en beräkning eller resultat till funktionen till höger i uttrycket. Ett exempel förklarar det bäst:

suppressMessages(library(tidyverse))
titanic %>% group_by(Survived)  %>% tally()
# A tibble: 2 × 2
  Survived     n
  <chr>    <int>
1 Alive      712
2 Dead      1496

där datamaterialet (dataframe) titanic skickas in i funktionen group_by() som grupperar data efter variablen Survived. Denna gruppering skickas sen vidare till funktioen tally() som gör sammanfattningen till en tabell.

Scatter plot

library(ggplot2)
ggplot(data = mtcars, aes(x = hp, y = mpg)) +
  geom_point() + 
  ggtitle("Cars fuel usage") 

Tabeller

suppressMessages(library(tidyverse))
titanic %>% dplyr::group_by(Survived) %>% tally()
# A tibble: 2 × 2
  Survived     n
  <chr>    <int>
1 Alive      712
2 Dead      1496

eller om man vill också ha proportioner

suppressMessages(library(tidyverse))
titanic %>% 
  dplyr::group_by(Survived)  %>% 
  tally() %>% 
  mutate(freq = prop.table(n))
# A tibble: 2 × 3
  Survived     n  freq
  <chr>    <int> <dbl>
1 Alive      712 0.322
2 Dead      1496 0.678

där vi skrivit våra pipes %>% enligt tidyverse-konventionen med radbryt mellan en lång serie pipes.

Stapeldiagram

Antal

library(ggplot2)
titanic %>% 
  group_by(Survived)  %>% 
  tally() %>% 
  ggplot(aes(x = Survived, y = n)) +
  geom_bar(stat = "identity") +
  ylab("proportion")

Histogram per kategori i samma figur

suppressMessages(library(ggplot2))
load(file = url("https://github.com/StatisticsSU/SDA1/blob/main/datorlab/lab3/FevChildren.RData?raw=true"))
ggplot(FevChildren, aes(x = fev, fill = age.group)) + 
  geom_histogram(alpha =0.75, bins = 20) + ggtitle("FEV given age.group")