Comment utiliser Mutate pour créer de nouvelles variables dans R



Ce tutoriel explique comment utiliser la fonction mutate() dans R pour ajouter de nouvelles variables à un bloc de données.

Ajout de nouvelles variables dans R

Les fonctions suivantes de la bibliothèque dplyr peuvent être utilisées pour ajouter de nouvelles variables à un bloc de données :

mutate() – ajoute de nouvelles variables à un bloc de données tout en préservant les variables existantes

transmute() – ajoute de nouvelles variables à un bloc de données et supprime les variables existantes

mutate_all() – modifie toutes les variables d’un bloc de données en même temps

mutate_at() – modifie des variables spécifiques par leur nom

mutate_if() – modifie toutes les variables qui remplissent une certaine condition

subir une mutation()

La fonction mutate() ajoute de nouvelles variables à un bloc de données tout en préservant toutes les variables existantes. La synaxe de base de mutate() est la suivante :

data <- mutate(new_variable = existing_variable/3)
  • data : le nouveau bloc de données auquel attribuer les nouvelles variables
  • new_variable : le nom de la nouvelle variable
  • existant_variable : la variable existante dans le bloc de données sur laquelle vous souhaitez effectuer une opération pour créer la nouvelle variable

Par exemple, le code suivant illustre comment ajouter une nouvelle variable root_sepal_width à l’ensemble de données iris intégré :

#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

transmuter()

La fonction transmute() ajoute de nouvelles variables à un bloc de données et supprime les variables existantes. Le code suivant illustre comment ajouter deux nouvelles variables à un ensemble de données et supprimer toutes les variables existantes :

#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

#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

muter_all()

La fonction mutate_all() modifie toutes les variables d’un bloc de données à la fois, vous permettant d’exécuter une fonction spécifique sur toutes les variables en utilisant la fonction funs() . Le code suivant illustre comment diviser toutes les colonnes d’un bloc de données par 10 à l’aide de mutate_all() :

#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

Notez que des variables supplémentaires peuvent être ajoutées au bloc de données en spécifiant un nouveau nom à ajouter à l’ancien nom de variable :

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

muter_at()

La fonction mutate_at() modifie des variables spécifiques par leur nom. Le code suivant illustre comment diviser deux variables spécifiques par 10 à l’aide de mutate_at() :

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

muter_if()

La fonction mutate_if() modifie toutes les variables qui remplissent une certaine condition. Le code suivant illustre comment utiliser la fonction mutate_if() pour convertir n’importe quelle variable de type factor en type caractère :

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

Le code suivant illustre comment utiliser la fonction mutate_if() pour arrondir toutes les variables de type numérique à une décimale :

#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

Lectures complémentaires :
Un guide pour apply(), lapply(), sapply() et tapply() dans R
Comment organiser les lignes dans R
Comment filtrer les lignes dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *