데이터 분석에서 조건 기반 처리는 필수적인 작업입니다. R에서는 이를 위한 다양한 구문들을 제공하는데, 특히 if 함수와 dplyr 패키지의 case_when 함수가 가장 기본적이고 중요합니다. 이 글에서는 R 조건문의 기초와 함께 실제 R 조건문 예제를 통해 어떻게 활용하는지 알아보겠습니다.

블로그 글을 작성함에 있어서 최대한 정확한 정보를 제공하고자 노력하고 있습니다만, 간혹 오류가 있을 수 있습니다. 발견시 댓글 달아주시면 정정하겠습니다. 블로그의 링크들을 통하여 구매하시면 소정의 커미션이 슬통에 들어옵니다.

유용한 R 조건문들

데이터 전처리를 하다 보면, 특정 조건에 맞게 수치를 변경시키거나 그룹을 나누는 일이 빈번합니다. 이러한 경우 유용한 조건문들 중 가장 유명한 두가지 조건문을 공부해봅시다.

  • if ... else ... 구문
  • case_when() 구문
r 조건문 예제 if문과 case when 이해하기
유명한 R 조건문 두 개를 뽑으면 if 문과 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() 함수는 세 개의 인자를 입력으로 받습니다.

  1. 첫 번째 인자인 test는 조건식으로, 논리값 또는 벡터(여러 개의 값)를 입력할 수 있습니다.
  2. 두 번째 인자인 yes는 test가 참인 경우 실행할 값 또는 연산식입니다.
  3. 세 번째 인자인 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의 값을 문자열로 변환하여 반환합니다.

Similar Posts