Verwendung von "mutate" zum Erstellen neuer Variablen in R

Von Fabian
Kategorie: R
Tags: dplyr
Lesezeit: 6 Minuten

In diesem Tutorial wird erläutert, wie Sie mit der Funktion mutate() in R neue Variablen zu einem Dataframe hinzufügen.

Hinzufügen neuer Variablen in R

Die folgenden Funktionen aus der dplyr-Bibliothek können verwendet werden, um einem Dataframe neue Variablen hinzuzufügen:

mutate() - Fügt einem Dataframe neue Variablen hinzu, während vorhandene Variablen beibehalten werden

transmute() - fügt einem Dataframe neue Variablen hinzu und löscht vorhandene Variablen

mutate_all() - Ändert alle Variablen in einem Dataframe gleichzeitig

mutate_at() - Ändert bestimmte Variablen nach Namen

mutate_if() - Ändert alle Variablen, die eine bestimmte Bedingung erfüllen

mutate()

Die Funktion mutate() fügt einem Dataframe neue Variablen hinzu, wobei vorhandene Variablen erhalten bleiben. Die grundlegende Synax für mutate() lautet wie folgt:

data <- mutate(new_variable = existing_variable/3)
  • data: Der neue Dataframe, dem die neuen Variablen zugewiesen werden sollen
  • new_variable: Der Name der neuen Variablen
  • existing_variable: Die vorhandene Variable im Dataframe, für die Sie eine Operation ausführen möchten, um die neue Variable zu erstellen

Der folgende Code zeigt beispielsweise, wie Sie dem integrierten Iris-Dataset eine neue Variable root_sepal_width hinzufügen:

#Definieren Sie das Dataframe als die ersten sechs Zeilen des Iris- Datasets
data <- head(iris)

#Daten anzeigen
data

#  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

#laden der dplyr Bibliothek
library(dplyr)

# Definieren Sie die neue Spalte root_sepal_width als Quadratwurzel der Sepal.Width-Variablen
data %>% mutate(root_sepal_width = sqrt(Sepal.Width))

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species root_sepal_width
#1          5.1         3.5          1.4         0.2  setosa         1.870829
#2          4.9         3.0          1.4         0.2  setosa         1.732051
#3          4.7         3.2          1.3         0.2  setosa         1.788854
#4          4.6         3.1          1.5         0.2  setosa         1.760682
#5          5.0         3.6          1.4         0.2  setosa         1.897367
#6          5.4         3.9          1.7         0.4  setosa         1.974842

transmute()

Die Funktion transmute() fügt einem Dataframe neue Variablen hinzu und löscht vorhandene Variablen. Der folgende Code zeigt, wie Sie einem Datensatz zwei neue Variablen hinzufügen und alle vorhandenen Variablen entfernen:

#Definieren Sie das Dataframe als die ersten sechs Zeilen des Iris-Datasets
data <- head(iris)

#Daten anzeigen
data

#  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

#Definieren Sie zwei neue Variablen und entfernen Sie alle vorhandenen Variablen
data %>% transmute(root_sepal_width = sqrt(Sepal.Width),
                   root_petal_width = sqrt(Petal.Width))

#  root_sepal_width root_petal_width
#1         1.870829        0.4472136
#2         1.732051        0.4472136
#3         1.788854        0.4472136
#4         1.760682        0.4472136
#5         1.897367        0.4472136
#6         1.974842        0.6324555

mutate_all()

Die mutate_all()-Funktion ändert sofort alle Variablen in einem Dataframe, in dem Sie unter Verwendung der funs()-Funktion, um eine bestimmte Funktion auf alle Variablen durchzuführen. Der folgende Code veranschaulicht, wie alle Spalten in einem Dataframe mit mutate_all() durch 10 geteilt werden:

# Definieren Sie ein neues Dataframe als die ersten sechs Iriszeilen ohne die Variable Species
data2 <- head(iris) %>% select(-Species)

# den neuen Dataframe anzeigen
data2

#  Sepal.Length Sepal.Width Petal.Length Petal.Width
#1          5.1         3.5          1.4         0.2
#2          4.9         3.0          1.4         0.2
#3          4.7         3.2          1.3         0.2
#4          4.6         3.1          1.5         0.2
#5          5.0         3.6          1.4         0.2
#6          5.4         3.9          1.7         0.4

# Teilen Sie alle Variablen im Dataframe durch 10
data2 %>% mutate_all(funs(./10))

#  Sepal.Length Sepal.Width Petal.Length Petal.Width
#1         0.51        0.35         0.14        0.02
#2         0.49        0.30         0.14        0.02
#3         0.47        0.32         0.13        0.02
#4         0.46        0.31         0.15        0.02
#5         0.50        0.36         0.14        0.02
#6         0.54        0.39         0.17        0.04

Beachten Sie, dass dem Dataframe zusätzliche Variablen hinzugefügt werden können, indem ein neuer Name angegeben wird, der an den alten Variablennamen angehängt werden soll:

data2 %>% mutate_all(funs(mod = ./10))

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length_mod
#1          5.1         3.5          1.4         0.2             0.51
#2          4.9         3.0          1.4         0.2             0.49
#3          4.7         3.2          1.3         0.2             0.47
#4          4.6         3.1          1.5         0.2             0.46
#5          5.0         3.6          1.4         0.2             0.50
#6          5.4         3.9          1.7         0.4             0.54
#  Sepal.Width_mod Petal.Length_mod Petal.Width_mod
#1            0.35             0.14            0.02
#2            0.30             0.14            0.02
#3            0.32             0.13            0.02
#4            0.31             0.15            0.02
#5            0.36             0.14            0.02
#6            0.39             0.17            0.04

mutate_at()

Die Funktion mutate_at() ändert bestimmte Variablen nach Namen. Der folgende Code zeigt, wie Sie mit mutate_at() zwei bestimmte Variablen durch 10 teilen:

data2 %>% mutate_at(c("Sepal.Length", "Sepal.Width"), funs(mod = ./10))

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length_mod
#1          5.1         3.5          1.4         0.2             0.51
#2          4.9         3.0          1.4         0.2             0.49
#3          4.7         3.2          1.3         0.2             0.47
#4          4.6         3.1          1.5         0.2             0.46
#5          5.0         3.6          1.4         0.2             0.50
#6          5.4         3.9          1.7         0.4             0.54
#  Sepal.Width_mod
#1            0.35
#2            0.30
#3            0.32
#4            0.31
#5            0.36
#6            0.39

mutate_if()

Die Funktion mutate_if() ändert alle Variablen, die eine bestimmte Bedingung erfüllen. Der folgende Code zeigt, wie die mutate_if()-Funktion verwenden, um alle Variablen vom Typ factor zum Typ character zu konvertieren:

#Variablentyp jeder Variablen in einem Dataframe finden
data <- head(iris)
sapply(data, class)

#Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#   "numeric"    "numeric"    "numeric"    "numeric"     "factor" 

#jede Variable vom Typ factor zum Typ character konvertieren
new_data <- data %>% mutate_if(is.factor, as.character)
sapply(new_data, class)

#Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#   "numeric"    "numeric"    "numeric"    "numeric"  "character"

Der folgende Code veranschaulicht die Verwendung der Funktion mutate_if(), um Variablen vom Typ numeric auf eine Dezimalstelle zu runden:

#Definieren Sie Daten als erste sechs Zeilen des Iris- Datasets
data <- head(iris)

#Daten anzeigen
data

#  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

#runden Sie alle Variablen vom Typ numerisch auf eine Dezimalstelle
data %>% mutate_if(is.numeric, round, digits = 0)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1            5           4            1           0  setosa
#2            5           3            1           0  setosa
#3            5           3            1           0  setosa
#4            5           3            2           0  setosa
#5            5           4            1           0  setosa
#6            5           4            2           0  setosa

Weiterführende Literatur: Eine Anleitung zum Anwenden(), lapply(), sapply() und tapply() in R
So ordnen Sie Zeilen in R

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: