Как использовать мутацию для создания новых переменных в R


В этом руководстве объясняется, как использовать функцию mutate() в R для добавления новых переменных во фрейм данных.

Добавление новых переменных в R

Следующие функции из библиотеки dplyr можно использовать для добавления новых переменных во фрейм данных:

mutate () — добавляет новые переменные во фрейм данных, сохраняя существующие переменные.

transmute() — добавляет новые переменные во фрейм данных и удаляет существующие переменные.

mutate_all() — одновременно изменяет все переменные во фрейме данных.

mutate_at() — изменяет определенные переменные по имени

mutate_if() — изменяет все переменные, соответствующие определенному условию.

мутировать ()

Функция mutate() добавляет новые переменные во фрейм данных, сохраняя все существующие переменные. Базовый синтаксис для mutate() следующий:

data <- mutate (new_variable = existing_variable/3)
  • data: новый фрейм данных для назначения новых переменных
  • new_variable: имя новой переменной
  • существующая_переменная: существующая переменная во фрейме данных, с которой вы хотите выполнить некоторую операцию для создания новой переменной.

Например, в следующем коде показано, как добавить новую переменную root_sepal_width во встроенный набор данных радужной оболочки :

#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

трансмутировать ()

Функция transmute() добавляет новые переменные во фрейм данных и удаляет существующие переменные. В следующем коде показано, как добавить две новые переменные в набор данных и удалить все существующие переменные:

#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

мутировать_все()

Функция mutate_all() одновременно изменяет все переменные во фрейме данных, позволяя выполнять определенную функцию для всех переменных с помощью функции funs().Следующий код иллюстрирует, как разделить все столбцы во фрейме данных на 10 с помощью 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

Обратите внимание, что во фрейм данных можно добавить дополнительные переменные, указав новое имя, которое будет добавлено к старому имени переменной:

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()

Функция mutate_at() изменяет определенные переменные по имени. Следующий код иллюстрирует, как разделить две конкретные переменные на 10 с помощью 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

мутировать_если ()

Функция mutate_if() изменяет все переменные, соответствующие определенному условию. В следующем коде показано, как использовать функцию mutate_if() для преобразования любых переменных типа factor в тип character :

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

В следующем коде показано, как использовать функцию mutate_if() для округления любых переменных числового типа до одного десятичного знака:

#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

Дальнейшее чтение:
Руководство по apply(), lapply(), sapply() и tapply() в R
Как расположить строки в R
Как фильтровать строки в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.