В этом руководстве объясняется, как использовать функцию 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