데이터 분석에서 조건 기반 처리는 필수적인 작업입니다. R에서는 이를 위한 다양한 구문들을 제공하는데, 특히 if
함수와 dplyr
패키지의 case_when
함수가 가장 기본적이고 중요합니다. 이 글에서는 R 조건문의 기초와 함께 실제 R 조건문 예제를 통해 어떻게 활용하는지 알아보겠습니다.
유용한 R 조건문들
데이터 전처리를 하다 보면, 특정 조건에 맞게 수치를 변경시키거나 그룹을 나누는 일이 빈번합니다. 이러한 경우 유용한 조건문들 중 가장 유명한 두가지 조건문을 공부해봅시다.
if ... else ...
구문case_when()
구문
if
and else
구문
특정 조건을 만족하는 경우와 만족하지 않는 경우에 다른 값을 부여하는 if ... else ...
구문의 사용법을 알아봅시다.
if ... else ...
구문
if (condition) {
statement 1
} else {
statement 2
}
위 코드는 if-else
조건문의 기본적인 형태입니다. 조건식의 결과에 따라 실행할 코드를 선택합니다. 주어진 코드에서 condition
은 논리적인 조건식으로, 이 조건식이 참(true)일 경우 statement 1
을 실행하고, 그렇지 않은 경우 statement 2
를 실행합니다. statement 1
과 statement 2
는 각각 하나의 실행문(statement)으로, 실행할 코드가 들어갑니다. 만약 결과 실행문을 짧게 작성할 수 있는 경우 다음과 같이 줄여 쓸 수 있습니다.
ifelse()
함수 구문
ifelse(test, yes, no)
ifelse()
함수는 if-else
조건문과 동일한 역할을 수행합니다. ifelse()
함수는 세 개의 인자를 입력으로 받습니다.
- 첫 번째 인자인 test는 조건식으로, 논리값 또는 벡터(여러 개의 값)를 입력할 수 있습니다.
- 두 번째 인자인 yes는 test가 참인 경우 실행할 값 또는 연산식입니다.
- 세 번째 인자인 no는 test가 거짓인 경우 실행할 값 또는 연산식입니다.
예제
if ... else ...
구문 예제를 살펴보겠습니다.
x <- 3; y <- 0
if (x > 4) {
y <- 1
} else {
y <- 2
}
y
## [1] 2
위 코드에서는 변수 x
에 3이 할당되어 있으므로, if
구문의 조건 x > 4
는 거짓(FALSE)입니다. 따라서 else
블록이 실행되어 변수 y
에 값 2
가 할당됩니다. 따라서 y
의 최종 값은 2
가 됩니다.
위의 코드를 ifelse
구문을 사용하면 훨씬 깔끔하게 나타낼 수 있습니다.
y <- ifelse(x > 4, 1, 2)
y
## [1] 2
ifelse()
함수가 유용한 이유는 벡터에도 적용이 쉽기 때문입니다. 예를 들어, 아래 코드에서는 벡터 x
의 각 원소가 0
보다 큰지 여부를 확인하고, 조건에 따라 “양수” 또는 “음수”를 반환합니다.
x <- c(1, -2, 3, -4, 5)
ifelse(x > 0, "양수", "음수")
## [1] "양수" "음수" "양수" "음수" "양수"
ifelse()
함수를 사용하면 조건에 따라 벡터의 각 원소를 쉽게 처리할 수 있으므로 데이터 분석 등에서 많이 활용됩니다. 또한, ifelse()
함수는 벡터화 연산이 가능하므로 데이터 프레임 등에서 조건에 따라 열 값을 처리할 때 편리하게 사용할 수 있습니다.
조건 3개 이상의 경우 case_when()
case_when()
함수는 tidyverse
라이브러리에 포함되어 있으므로, tidyverse
라이브러리를 불러온 후 사용할 수 있습니다. case_when()
함수는 다음과 같은 구문으로 사용됩니다.
case_when(
조건식1 ~ 결과1,
조건식2 ~ 결과2,
...
.default = 기본결과
)
위 구문에서 각 조건식은 논리식으로, 해당 조건식이 참일 경우 해당 결과가 반환됩니다. .default
는 조건식 중 어떤 조건도 참이 아닌 경우 반환할 값을 지정합니다. 간혹, TRUE ~ 기본결과
를 사용하여 기본값을 지정하는 경우도 있습니다.
case_when()
함수 사용 예
case_when()
함수는 다양한 조건에 따라 값을 반환할 수 있습니다. 아래 코드에서는 x > 0, x == 0, x < 0
의 조건에 따라 “양수”, “0”, “음수”를 반환하도록 구현되어 있습니다.
library(tidyverse)
x <- c(1, -2, 3, -4, 5)
result <- case_when(
x > 0 ~ "양수",
x == 0 ~ "0",
x < 0 ~ "음수",
.default = as.character(x)
)
result
## [1] "양수" "음수" "양수" "음수" "양수"
위 코드에서는 .default = as.character(x)
로 지정되어 있어, 조건식 중 어떤 조건도 참이 아닌 경우 벡터 x
의 값을 문자열로 변환하여 반환합니다.