Mutate를 사용하여 r에서 새 변수를 만드는 방법


이 튜토리얼에서는 R의 mutate() 함수를 사용하여 데이터 프레임에 새 변수를 추가하는 방법을 설명합니다.

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)

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

mutate_all() 함수는 데이터 프레임의 모든 변수를 한 번에 수정하므로 funs() 함수를 사용하여 모든 변수에 대해 특정 기능을 수행할 수 있습니다. 다음 코드는 mutate_all()을 사용하여 데이터 프레임의 모든 열을 10으로 나누는 방법을 보여줍니다.

 #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() 함수는 이름으로 특정 변수를 수정합니다. 다음 코드는 mutate_at()를 사용하여 두 개의 특정 변수를 10으로 나누는 방법을 보여줍니다.

 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() 함수는 특정 조건을 만족하는 모든 변수를 수정합니다. 다음 코드는 mutate_if() 함수를 사용하여 유형 요소 의 변수를 문자 유형 으로 변환하는 방법을 보여줍니다.

 #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

추가 자료:
R의 apply(), lapply(), sapply() 및 tapply()에 대한 가이드
R에서 줄을 정렬하는 방법
R에서 행을 필터링하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다