So verwenden sie mutate, um neue variablen in r zu erstellen


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

Neue Variablen in R hinzufügen

Die folgenden dplyr- Bibliotheksfunktionen können verwendet werden, um neue Variablen zu einem Datenrahmen hinzuzufügen:

mutate() – fügt neue Variablen zu einem Datenrahmen hinzu und behält dabei vorhandene Variablen bei

transmute() – fügt einem Datenrahmen neue Variablen hinzu und entfernt vorhandene Variablen

mutate_all() – ändert alle Variablen in einem Datenrahmen auf einmal

mutate_at() – ändert bestimmte Variablen nach Namen

mutate_if() – ändert alle Variablen, die eine bestimmte Bedingung erfüllen

mutieren()

Die Funktion mutate() fügt einem Datenrahmen neue Variablen hinzu und behält dabei alle vorhandenen Variablen bei. Die grundlegende Syntax von mutate() lautet:

 data <- mutate (new_variable = existing_variable/3)
  • Daten: der neue Datenblock, dem die neuen Variablen zugewiesen werden sollen
  • neue_Variable: der Name der neuen Variablen
  • bestehende_Variable: die vorhandene Variable im Datenrahmen, an der Sie eine Operation ausführen möchten, um die neue Variable zu erstellen

Der folgende Code zeigt beispielsweise, wie dem eingebetteten Iris- Datensatz eine neue Variable „root_sepal_width“ hinzugefügt wird:

 #define data frame as the first six lines of the iris dataset
data <- head(iris)

#view data
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

#load dplyr library
library(dplyr)

#define new column root_sepal_width as the square root of the Sepal.Width variable
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

verwandeln()

Die Funktion transmute() fügt einem Datenrahmen neue Variablen hinzu und entfernt vorhandene Variablen. Der folgende Code zeigt, wie man einem Datensatz zwei neue Variablen hinzufügt und alle vorhandenen Variablen entfernt:

 #define data frame as the first six lines of the iris dataset
data <- head(iris)

#viewdata
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

#define two new variables and remove all existing variables
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 Funktion mutate_all() ändert alle Variablen in einem Datenrahmen auf einmal, sodass Sie mit der Funktion funs() eine bestimmte Funktion für alle Variablen ausführen können. Der folgende Code zeigt, wie alle Spalten in einem Datenrahmen mit mutate_all() durch 10 geteilt werden:

 #define new data frame as the first six rows of iris without the Species variable
data2 <- head(iris) %>% select(-Species)

#view the new data frame
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

#divide all variables in the data frame by 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 Datenrahmen zusätzliche Variablen hinzugefügt werden können, indem Sie einen neuen Namen angeben, der an den alten Variablennamen angehängt wird:

 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 man zwei spezifische Variablen mit mutate_at() durch 10 dividiert:

 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 veranschaulicht, wie Sie die Funktion mutate_if() verwenden, um eine beliebige Variable vom Typ „ Faktor“ in den Typ „ Zeichen“ zu konvertieren:

 #find variable type of each variable in a data frame
data <- head(iris)
sapply(data, class)

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

#convert any variable of type factor to type character
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 zeigt, wie Sie mit der Funktion mutate_if() alle numerischen Variablen auf eine Dezimalstelle runden:

 #define data as first six rows of iris dataset
data <- head(iris)

#view data
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

#round any variables of type numeric to one decimal place
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 zu apply(), lapply(), sapply() und tapply() in R
So ordnen Sie Zeilen in R an
So filtern Sie Zeilen in R

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert