기존 변수에서 새 변수 만들기 case_when()
기존 변수에서 새로운 변수를 만드는 방법으로 dplyr
패키지는 몇 가지 함수를 제공하고 있습니다. 참고로 dplyr
패키지는 tidyverse
패키지에 포함되어 있습니다.
mutate()
함수case_when()
함수recode()
함수if_else()
함수
이 글에서는 case_when()
함수를 이용하는 방법을 중심으로 설명하겠습니다.
case_when()
함수의 기본 사용법은 다음과 같습니다. 새로운 변수를 만들려면 mutate()
함수와 같이 사용하여야 합니다.
library(tidyverse)
df %>%
mutate(새변수 = case_when(기존변수 < 30 ~ "낮음",
기존변수 < 60 ~ "중간",
TRUE ~ "높음"))
위 구문에서 TRUE
는 앞의 조건들에 맞지 않는 나머지
를 의미합니다.
데이터 프레임을 만들어서 이 함수를 실제로 활용하는 예제를 보여주겠습니다.
먼저 tidyverse
패키지를 로드 하겠습니다.
library(tidyverse)
다음으로 가상의 데이터 프레임을 만들겠습니다.
df <-
data.frame(name = c("영희", "철민", "연수", "나연", "아라"),
points = c(153, 95, 102, 111, 127),
score = c(92, 87, 75, 89, NA))
df
## name points score
## 1 영희 153 92
## 2 철민 95 87
## 3 연수 102 75
## 4 나연 111 89
## 5 아라 127 NA
예시 1 : 하나의 기존 변수에서 새 변수 만들기
아래 예시는 기존 score
변수의 값을 이용하여 grade
라는 새 변수를 만드는 방법입니다.
df %>%
mutate(grade = case_when(score > 90 ~ "높음",
score > 80 ~ "중간",
TRUE ~ "낮음"))
## name points score grade
## 1 영희 153 92 높음
## 2 철민 95 87 중간
## 3 연수 102 75 낮음
## 4 나연 111 89 중간
## 5 아라 127 NA 낮음
score
변수의 값이 90보다 크면 grade
변수의 값은 높음
, score
변수의 값이 80보다 크면 grade
변수의 값은 중간
, 나머지 즉 score
변수의 값이 80이하이거나 NA(결측치)인 경우에는 grade
변수의 값에 낮음
이 입력이 됩니다.
만일 score
변수의 값이 NA
일 경우 grade
변수의 값도 NA
로 입력되기를 원한다면 아래와 같이 합니다.
df %>%
mutate(grade = case_when(score > 90 ~ "높음",
score > 80 ~ "중간",
is.na(score) ~ as.character(NA),
TRUE ~ "낮음"))
## name points score grade
## 1 영희 153 92 높음
## 2 철민 95 87 중간
## 3 연수 102 75 낮음
## 4 나연 111 89 중간
## 5 아라 127 NA <NA>
예시 2 : 다수의 기존 변수에서 새 변수 만들기
아래 예시는 기존 두 개의 변수(points
, score
)를 이용하여 quality
라는 새 변수를 만드는 방법입니다.
df %>%
mutate(grade = case_when(score > 90 & points > 150 ~ "매우 우수",
score > 80 & points > 100 ~ "우수",
TRUE ~ "보통"))
## name points score grade
## 1 영희 153 92 매우 우수
## 2 철민 95 87 보통
## 3 연수 102 75 보통
## 4 나연 111 89 우수
## 5 아라 127 NA 보통