기존 변수에서 새 변수 만들기 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 보통