Jobba med dataset i dplyr

Paketet dplyr innehåller funktioner som gör det lättare att arbeta med ett dataset.

Vi demonstrerar funktionerna med ett dataset som heter iris, med data om bladstorlek på tre olika blomarter.

#Läs in paketet dplyr
library(dplyr) |> suppressMessages() |> suppressWarnings() 

# Gör datasetet iris tillgängligt
data(iris)

# Titta på de första raderna
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Varje rad representerar en blomma som tillhör Iris-familjen. De 4 numeriska variablerna är olika mått på bladens storlek. Den femte variabeln Species anger vilken art blomman tillhör. Arten kan vara setosa, versicolor eller virginica.

slice: Välj ut rader med hjälp av radnummer

Med slice kan du skapa ett dataset som enbart inkluderar vissa rader ur vårt ursprungliga dataset. Iris innehåller 150 rader. Följade kod delar in datasetet iris i två olika dataset - ett som inkluderar de första 100 raderna och ett som inkluderar de sista 50.

iris_first100 <- iris %>% slice(1:100)
iris_last50 <- iris %>% slice(101:150)

Låt oss bryta ned den första kodraden i mindre delar:

  • iris_first100 <- betyder att du vill skapa ett nytt objekt som heter iris_first100.
  • iris %>% betyder att du utgår från datasetet iris.
  • slice(1:100) betyder att ditt nya objekt (iris_first100) ska vara ett dataset som inkluderar rad 1 till rad 100 från iris.

filter: Välj ut rader med hjälp av villkor

Precis som slice används filter för att välja ut ett antal rader som ska inkluderas i ett nytt dataset. Med filter anger du dock inte vilka radnummer du vill inkludera. Istället anger du villkor för att en viss rad ska inkluderas.

I det här exempelet skapar vi ett nytt dataset som vi kallas iris_setosa. Det innehåller de rader som uppfyller villkoret att värdet på variabeln Species är “setosa”.

iris_setosa <- iris %>% filter(Species == "setosa")

Vi har nu ett dataset med 50 rader. På dessa rader är värdet på Species “setosa”. Notera ett par saker:

  • Vi skriver “setosa” inom citattecken. Utan citattecken skulle funktionen tro att vi syftade på ett objekt i R med namnet setosa.
  • Vi använder dubbla likhetstecken, dvs ==, när vi vill uttrycka ett villkor.

Om vi vill välja ut de rade där värdet på variablen Species inte är “setosa” kan vi använda !=, som betyder inte lika med:

iris_not_setosa <- iris %>% filter(Species != "setosa")

Vårt nya dataset iris_not_setosa inkluderar de 100 rader i iris där värdet på Species inte är setosa.

select: Välj ut kolumner(variabler)

Med select kan vi skapa ett nytt dataset som enbart inkluderar vissa av variablerna. Följande kod skapar ett nytt dataset som bara innehåller variablerna Sepal.Length och Sepal.Width.

iris_sepal_length_width <- iris %>% select(Sepal.Length, Sepal.Width)
head(iris_sepal_length_width)
  Sepal.Length Sepal.Width
1          5.1         3.5
2          4.9         3.0
3          4.7         3.2
4          4.6         3.1
5          5.0         3.6
6          5.4         3.9

mutate: Skapa nya variabler

Ibland vill vi skapa nya variabler med hjälp av de ursprungliga variablerna. Vi kan till exempel vilja transformera en variabel. Följande kod skapar ett nytt dataset som heter iris_logged, med variabeln log(Sepal.Length).

iris_logged <- iris %>% mutate(logged_sepal_length = log(Sepal.Length))
head(iris_logged)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species logged_sepal_length
1          5.1         3.5          1.4         0.2  setosa            1.629241
2          4.9         3.0          1.4         0.2  setosa            1.589235
3          4.7         3.2          1.3         0.2  setosa            1.547563
4          4.6         3.1          1.5         0.2  setosa            1.526056
5          5.0         3.6          1.4         0.2  setosa            1.609438
6          5.4         3.9          1.7         0.4  setosa            1.686399

Vi ser att vi har lagt till en variabel som är logaritmen av Sepal.Length.

slice_sample: Lägg raderna i slumpvis ordning

Funktionen slice_sample gör det enkelt att lägga raderna ett dataset i slumpvis ordning.

iris_random <- iris %>% slice_sample(prop=1)
head(iris_random)
  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1          5.8         2.7          4.1         1.0 versicolor
2          6.4         2.8          5.6         2.1  virginica
3          4.4         3.2          1.3         0.2     setosa
4          4.3         3.0          1.1         0.1     setosa
5          7.0         3.2          4.7         1.4 versicolor
6          5.4         3.0          4.5         1.5 versicolor

Vi ser att raderna kommer i en ny ordning, och att de inte längre är sorterade efter variabeln Species.

Argumentet prop står för proportion, och prop=1 betyder att alla rader ska vara med i vårt nya dataset. Om vi istället hade skrivet exempelvis prop=0.5 hade bara hälften av raderna kommit med.

arrange: sortera en dataframe

Vi kan sortera en data.frame efter värdet på en variabel med funktionen arrange. Här sorterar vi datasetet iris så att de rader som har lägst värdet på Sepal.Length kommer först. Vi sorterar alltså variabeln i ökande ordning.

iris_sorted <- iris %>% arrange(Sepal.Length)
head(iris_sorted)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          4.3         3.0          1.1         0.1  setosa
2          4.4         2.9          1.4         0.2  setosa
3          4.4         3.0          1.3         0.2  setosa
4          4.4         3.2          1.3         0.2  setosa
5          4.5         2.3          1.3         0.3  setosa
6          4.6         3.1          1.5         0.2  setosa

Om vi istället vill sortera datasetet i omvänd ordning, så att de rader där en viss variabel har det störtsa värdet kommer först, lägger vi till desc som i följande kod. Tillägget desc står för descending, eftersom vi nu sorterar variabeln i minskande ordning.

iris_sorted_hightolow <- iris %>% arrange(desc(Sepal.Length))
head(iris_sorted_hightolow)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          7.9         3.8          6.4         2.0 virginica
2          7.7         3.8          6.7         2.2 virginica
3          7.7         2.6          6.9         2.3 virginica
4          7.7         2.8          6.7         2.0 virginica
5          7.7         3.0          6.1         2.3 virginica
6          7.6         3.0          6.6         2.1 virginica