R 조건문 (if, ifelse) 완벽 가이드

데이터 전처리를 하다 보면 특정 조건에 맞게 수치를 변경시키거나 그룹을 나누는 작업이 빈번하게 일어납니다. 예를 들어 기업 데이터에서 “매출이 양수면 1(흑자), 음수면 0(적자)으로 일괄 변경해라” 같은 경우가 대표적입니다.

이럴 때 필수적으로 꺼내 들어야 하는 무기가 바로 조건문(Conditional Statements)입니다. 오늘은 R에서 가장 핵심적으로 쓰이는 3가지 조건문인 if/else, ifelse(), 그리고 최신 데이터 전처리 트렌드에서 다중 조건을 완벽하게 처리해주는 case_when()의 실전 완벽 가이드를 정리해 드립니다.

1. 전통적이고 직관적인 if … else 구문

다른 모든 프로그래밍 언어에서도 통용되는 가장 고전적인 조건문 형태입니다. 만약 지정한 괄호 안의 조건이 참(TRUE)이면 첫 번째 중괄호 {} 블록을 실행하고, 거짓(FALSE)이면 else 뒤의 두 번째 블록을 실행합니다.

x <- 3

if (x > 4) {
    y <- 1  
} else {
    y <- 2
}

y
> [1] 2

위 코드에서는 x > 4의 검사 결과가 거짓(3 > 4는 거짓)이므로 자연스럽게 else 구문으로 넘어가게 되어, 최종적으로 y에 2가 할당된 것을 알 수 있습니다.

2. 벡터화의 마법: 한 방에 처리하는 ifelse() 함수

사실 실무 R 코딩에서는 위와 같이 공간을 낭비하며 길게 쓰는 if...else 구문보다 내장된 ifelse() 삼항 함수를 압도적으로 많이 사용합니다. 이 함수를 쓰면 직관적인 파라미터 세 개(조건식, 참일 때, 거짓일 때)로 모든 분기를 한 줄에 끝낼 수 있습니다.

# 1번 예제를 한 줄로 줄이는 방법
y <- ifelse(x > 4, 1, 2)
y
> [1] 2

💡 실전 꿀팁: ifelse()가 막강한 이유

ifelse()의 진짜 파괴적인 매력은 하나의 단일 변수가 아닌, 수만 개로 묶여 있는 벡터(Vector)나 데이터프레임 열(Column) 전체에 한 번에 적용이 가능하다는 점입니다.

x_vec <- c(1, -2, 3, -4, 5)
ifelse(x_vec > 0, "양수", "음수")
> [1] "양수" "음수" "양수" "음수" "양수"

이렇게 데이터가 수십만 개여도 for 반복문을 쓸 필요 없이 ifelse 단 한 방이면 모든 인덱스를 순회하며 결과를 분기시킬 수 있어, 실무 데이터 랭글링에서 독보적으로 쓰이는 함수입니다.

3. 분기 조건이 3개 이상일 땐? 무조건 case_when()

현업에선 이분법이 잘 통하지 않습니다. 조건이 “A이면 이것, B이면 저것, C이면 요것…” 이렇게 늘어날 경우 ifelse()안에 다시 ifelse()를 중첩(Nested)시켜 써야 하고, 코드는 금세 지옥으로 변합니다. 이럴 때는 현대 R 생태계를 점령한 dplyr (혹은 tidyverse) 패키지의 case_when()을 전격 기용합니다.

library(dplyr)

x_vec <- c(1, -2, 3, -4, 5)

result <- case_when(
  x_vec > 0 ~ "양수",         # 0보다 크면 양수
  x_vec == 0 ~ "0",           # 0 이면 0
  x_vec < 0 ~ "음수",         # 0보다 작으면 음수
  .default = as.character(x_vec)  # 어떤 조건도 맞지 않을 때의 기본 방어값
)

result
> [1] "양수" "음수" "양수" "음수" "양수"

구조를 읽는 순간 직관적으로 어떤 조건을 뜻하는지 바로 눈에 들어옵니다. 좌측엔 조건을, ~ (물결 기호, 틸드) 우측엔 반환값을 순서대로 정리하기만 하면 끝입니다. 최신 R 버전에서는 TRUE ~ 값 대신 .default = 값 옵션을 명시적으로 지원하여 안전성을 더 높였습니다.


요약하자면, 단일 로직 분기에는 if...else를 쓰고, 거대한 표 데이터의 2가지 카테고리 분리에는 ifelse(), 복잡한 다중 카테고리 태깅 작업엔 case_when() 구문을 활용하시면 코드가 놀랍도록 간결해지니 꼭 숙지하시기 바랍니다!


당신이 좋아할 만한 콘텐츠

by Google Adsense


관련 글 보기