Mit mutate() werden neue Variablen erstellt. Die Funktion fügt die neuen Variablen zu den bestehenden hinzu. Sie können mutate() auch verwenden, um bestehende Variablen zu ändern.
Die Funktion transmute() erstellt ebenfalls Variablen, entfernt jedoch alle anderen Variablen, die in transmute() weder erstellt noch genannt werden.
Um Variablen mit mutate() zu erstellen oder zu ändern, geben Sie den Namen der Variablen (die erstellt oder geändert werden soll) an, gefolgt von der Definition der Variablen. Im folgenden Beispiel wird die Variable ny_variabel erstellt, indem cyl mit 2 multipliziert wird:
mpg |>
mutate(ny_variabel = cyl*2)cyl ny_variabel
4 8
4 8
4 8
4 8
6 12Sie können mit mutate() mehrere neue Variablen gleichzeitig erstellen, indem Sie die Variablen durch Kommas trennen. Sie können auch Variablen verwenden, die gerade erst erstellt wurden. Im folgenden Beispiel wird ny_variabel erstellt und anschließend direkt verwendet, um ny_variabel2 zu erstellen.
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 144Die Funktion case_when() kann verwendet werden, um eine Variable auf Grundlage von Bedingungen zu erstellen. Das ist effizienter als die Funktion ifelse(), die häufig zu umständlichem Code führt. Unten wird die Variable ny_variabel auf Grundlage der Information in der Variablen displ erstellt. Ist displ <2, wird ny_variabel gleich 0. Ist displ <3, wird ny_variabel gleich 1. Ist displ >3, wird ny_variabel gleich 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 1Sie können case_when() verwenden, um kategoriale Variablen mit Zeichenketten zu erstellen:
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 Lagomacross()
Die Funktion across() ermöglicht es, mutate() auf viele Spalten gleichzeitig anzuwenden. Die Funktion ist nützlich, um Änderungen an vielen bestehenden Variablen gleichzeitig vorzunehmen. Die Funktion mutate() wird mit <tidy-select> kombiniert, also mit Funktionen, die Spalten sehr effizient auswählen. Ein Beispiel für <tidy-select> ist everything(), das "alle Variablen" bedeutet.
Um across zu demonstrieren, erstellen wir mit der Funktion tibble() einen neuen Data Frame:
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_datavar1 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 1000Es gibt zwei numerische Spalten (var1, var3), deren Quadratwurzel wir nun berechnen wollen. Die Quadratwurzel wird mit der Funktion sqrt berechnet. Die Spalten var1 und var3 sind die Spalten Nummer 1 und 3. Die folgenden Befehle sind gleichwertig:
## Quadratwurzel von var1 und var3
my_data %>%
mutate(across(c(var1, var3), sqrt))
## Wie oben, aber nun mit dem Index der Spalten
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.6Wie oben zu sehen, werden die bestehenden Spalten ersetzt. Wenn die Funktion neue Spalten erstellen soll, verwenden wir das Argument .names, mit dem wir ein Suffix oder Präfix für die neuen Spalten festlegen können:
## Quadratwurzel von var1 und var3.
## Neue Spalten erhalten das Suffix "_kvadratrot"
my_data %>%
mutate(across(c(1, 3), sqrt, .names="{col}_kvadratrot")) 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.6Komplexere Funktionen lassen sich mit der Tilde (~) definieren, wobei der aktuelle Wert in jeder Zeile durch den Platzhalter .x dargestellt wird. Im nächsten Beispiel wählen wir alle numerischen Spalten aus, quadrieren den Wert und speichern ihn in einer neuen Spalte mit dem Präfix "ny_":
## Numerische Spalten auswählen, quadrieren, Ergebnis in neuen Spalten mit dem Präfix "ny_" speichern
my_data %>%
mutate(across(where(is.numeric), ~ .x^2, .names = "ny_{col}"))## 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 1000000Im Folgenden werden mutate() und across() mit Mustervergleichen auf den Zeichenketten der Variablennamen gezeigt:
Hier werden Spalten verändert, die das Zeichen "1" enthalten:
## Verändert Spalten, deren Spaltenname die Ziffer 1 enthält
my_data %>%
mutate(across(matches('1'), ~ .x^2, .names = "ny_{col}"))## 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 100Hier werden Spalten verändert, die auf das Zeichen "3" enden:
## Verändert Spalten, die auf das Zeichen 3 enden
my_data %>%
mutate(across(ends_with('3'), ~ .x^2, .names = "ny_{col}"))## 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