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:
mpg |>
mutate(ny_variabel = cyl*2)
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
.
mpg |>
mutate(ny_variabel = cyl*2,
ny_variabel2 = ny_variabel^2)
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.
mpg |> mutate(ny_variabel = case_when(displ < 2 ~ 0,
displ < 3 ~ 1,
displ > 3 ~ 2))
# 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:
mpg |> mutate(ny_variabel = case_when(displ < 2 ~ 'Lite',
displ < 3 ~ 'Lagom',
displ > 3 ~ 'Mycket'))
# 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():
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
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:
# 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))
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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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_":
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
# 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
Nedan följer mutate()
och across()
med matchiningar på variabelnamnens strängar:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
# 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
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
# 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