Gå till index

Analys och forskning med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande och deskriptiva analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Skapa prediktionsmodeller med Tidymodels
    6 Ämnen
  12. Hypotestester och epidemiologiska mått
    5 Ämnen
Avsnitt Progress
0% färdig

Med mutate() skapas nya variabler. Funktionen adderar de nya variablerna till de befintliga. Du kan också använda mutate() för att ändra befintliga variabler.

Funktionen transmute() skapar också variabler men transmute() eliminerar alla andra variabler som inte skapas eller nämns i transmute().

För att skapa eller ändra variabler med mutate() anges namnet på variabeln (som skall skapas eller ändras) följt av hur variabeln skall definieras. I följande exempel skapas variabeln ny_variabel genom att multiplicera cyl med 2:

R
mpg |>
  mutate(ny_variabel = cyl*2) 
Resultat
cyl         ny_variabel
4           8
4           8
4           8
4           8
6          12

Du kan skapa flera nya variabler samtidigt med mutate() genom att separera variablerna med kommatecken. Du kan även använda variabler som just skapats. I exemplet nedan skapas ny_variabel som sedan används direkt för att skapa ny_variabel2.

R
mpg |>
  mutate(ny_variabel  = cyl*2,
         ny_variabel2 = ny_variabel^2)
Resultat
cyl     ny_variabel  ny_variabel2
4       8            64
4       8            64
4       8            64
4       8            64
6       12           144

Funktionen case_when() kan användas för att skapa en variabel baserat på villkor. Detta är effektivare än funktionen ifelse(), som ofta resulterar i krånglig kod. Nedan skapas variabeln ny_variabel baserat på information i variabeln displ. Om displ är <2 blir ny_variabel lika med 0. Om displ är <3 blir ny_variabel lika med 1. Om displ är >3 blir ny_variabel lika med 2.

R
mpg |> mutate(ny_variabel = case_when(displ < 2 ~ 0,
                                      displ < 3 ~ 1,
                                      displ > 3 ~ 2))
Resultat
# A tibble: 234 × 2
displ ny_variabel
1.8           0
1.8           0
2             1
2             1
2.8           1
2.8           1
3.1           2
1.8           0
1.8           0
2             1

Du kan använda case_when() för att skapa kategoriska variabler med strängar:

R
mpg |> mutate(ny_variabel = case_when(displ < 2 ~ 'Lite',
                                      displ < 3 ~ 'Lagom',
                                      displ > 3 ~ 'Mycket'))
Resultat
# A tibble: 234 × 2
displ ny_variabel
1.8   Lite       
1.8   Lite       
2     Lagom      
2     Lagom      
2.8   Lagom      
2.8   Lagom      
3.1   Mycket     
1.8   Lite       
1.8   Lite       
2     Lagom 

across()

Funktionen across() Gör det möjligt att tillämpa mutate() på många kolumner samtidigt. Funktionen är användbar för att göra ändringar i många befintliga variabler samtidigt. Funktionen mutate() kombineras med <tidy-select>, vilka är funktioner som specificerar kolumner på ett mycket effektivt sätt. Exempel på <tidy-select> är everything() som betyder "alla variabler".

För att demonstrera across skapar vi en ny dataframe med hjälp av funktionen tibble():

R
my_data <-
  tibble(var1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
         var2 = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"),
         var3 = c(100, 200, 300, 400, 500, 600, 700, 800, 900, 1000))

my_data
Resultat
var1  var2   var3
1     a       100
2     b       200
3     c       300
4     d       400
5     e       500
6     f       600
7     g       700
8     h       800
9     i       900
10    j      1000

Det finns två numeriska kolumner (var1, var3) vilka vi nu skall beräkna kvadratroten på. Kvadratrot beräknas med funktionen sqrt. Kolumnerna var1 och var3 är kolumn nummer 1 och 3. Följande kommandon är ekvivalenta:

R
# Kvadratroten på var1 och var3
my_data %>%
  mutate(across(c(var1, var3), sqrt))

# Som ovan men nu med index på kolumnerna
my_data %>%
  mutate(across(c(1, 3), sqrt))
Resultat
var1  var2   var3
1     a      10  
1.41  b      14.1
1.73  c      17.3
2     d      20  
2.24  e      22.4
2.45  f      24.5
2.65  g      26.5
2.83  h      28.3
3     i      30  
3.16  j      31.6

Som framgår ovan ersätts de befintliga kolumnerna. Om vi vill att funktionen skall skapa nya kolumner använder vi argumentet .names där vi har möjlighet att specificera ett suffix eller prefix på nya kolumner:

R
# Kvadratroten på var1 och var3.
# Nya kolumner får suffix "_kvadratrot"
my_data %>%
  mutate(across(c(1, 3), sqrt, .names="{col}_kvadratrot"))
Resultat
    var1 var2   var3     var1_kvadratrot   var3_kvadratrot
       1 a       100            1               10  
       2 b       200            1.41            14.1
       3 c       300            1.73            17.3
       4 d       400            2               20  
       5 e       500            2.24            22.4
       6 f       600            2.45            24.5
       7 g       700            2.65            26.5
       8 h       800            2.83            28.3
       9 i       900            3               30  
       10 j      1000            3.16            31.6

Mer komplicerade funktioner kan defineras med tilde (~) och det aktuella värdet på varje rad representeras med platshållaren .x. I nästa exempel selekterar vi alla numeriska kolumner, kvadrerar värdet och sparar i ny kolumn med prefix "ny_":

R
# Selektera numeriska kolumner, kvadrera dem, sparar resultatet i nya kolumner med prefix "ny_"
my_data %>%
  mutate(across(where(is.numeric), ~ .x^2, .names = "ny_{col}"))
Resultat
# A tibble: 10 × 5
    var1 var2   var3 ny_var1 ny_var3
   <dbl> <chr> <dbl>   <dbl>   <dbl>
 1     1 a       100       1   10000
 2     2 b       200       4   40000
 3     3 c       300       9   90000
 4     4 d       400      16  160000
 5     5 e       500      25  250000
 6     6 f       600      36  360000
 7     7 g       700      49  490000
 8     8 h       800      64  640000
 9     9 i       900      81  810000
10    10 j      1000     100 1000000

Här följer mutate() och across() med matchiningar på variabelnamnens strängar:

R
# Selekterar kolumner som innehåller siffran 1
my_data %>%
  mutate(across(matches('1'), ~ .x^2, .names = "ny_{col}"))
Resultat
# A tibble: 10 × 4
    var1 var2   var3 ny_var1
   <dbl> <chr> <dbl>   <dbl>
 1     1 a       100       1
 2     2 b       200       4
 3     3 c       300       9
 4     4 d       400      16
 5     5 e       500      25
 6     6 f       600      36
 7     7 g       700      49
 8     8 h       800      64
 9     9 i       900      81
10    10 j      1000     100
R
# Selekterar kolumner som slutar med tecknet 3
my_data %>%
  mutate(across(ends_with('3'), ~ .x^2, .names = "ny_{col}"))
Resultat
# A tibble: 10 × 4
    var1 var2   var3 ny_var3
   <dbl> <chr> <dbl>   <dbl>
 1     1 a       100   10000
 2     2 b       200   40000
 3     3 c       300   90000
 4     4 d       400  160000
 5     5 e       500  250000
 6     6 f       600  360000
 7     7 g       700  490000
 8     8 h       800  640000
 9     9 i       900  810000
10    10 j      1000 1000000

Logga in för att läsa

Som medlem har du tillgång till allt nuvarande och kommande utbildningsmaterial. Du kan följa din utveckling och få intyg på avklarade moment.