2. 데이터 취득 및 정제 > 2-2. 결측값 처리하기

결측값 처리하기


🧭 목차

  1. 조건문
  2. 반복문
  3. 결측값 처리

데이터를 분석하다 보면, 특정 조건에 부합하는 값을 찾아내거나 데이터의 일부를 추출하는 등의 작업을 하게 됩니다. 이번 장에서는 해당 작업을 편리하게 해주는 '조건문'과 '반복문'을 살펴본 뒤, 대표적인 데이터 정제 작업 '결측값 처리'에 대해 학습해 보겠습니다.


1) 조건문

조건에 부합하는 값을 추출하는 방법은 다음과 같습니다.

  • [ ]에 행/열 조건 명시하기

    test = c(21, 10, 2, NA, 54)
    
    test[test<20]        # 20 미만인 요소 추출
    > 10 2 NA            # R이 생각했을 때 NA는 모르겠음 → NA 출력
    
    test[!is.na(test)]   # NA 제거 후 출력
    > 21 10 2 54
    
    
  • if문

    x = 1004
    if (x %% 2 ==0) {
        print('x는 짝수입니다.')   # 조건이 참인 경우
    } else {
        print('x는 홀수입니다.')   # 조건이 거짓인 경우
    }
    > "x는 짝수입니다."
    
  • ifelse문

    • ifelse(조건식, 참인 경우 반환값, 거짓인 경우 반환값)
    x = c(-2:2)
    options(digits=2)   # 숫자 표현시 유효자릿수 설정
    
    sqrt(ifelse(x>0, x, NA))
    > NA  NA  NA 1.0 1.4
    
    

2) 반복문

  • repeat문

    • 단순 반복
    # 작성방법
    repeat {
        반복 수행할 문장
    }
    
    # 예시
    i = 10
    repeat {
        if(i > 20) {
            break
        } else {
            print(i)
            i = i + 2
        }
    }
    
  • while문

    • repeat문if문이 합쳐진 반복문으로, 조건식이 참인 경우 단순 반복된다.
    • 반복문 종료값이 조건식일 때 사용한다.
    # 작성방법
    while(조건식) {
        조건식이 참일 때 반복 수행할 문장
    }
    
    # 예시
    i = 10
    while(i < 20) {
        print(i)
        i = i + 2
    }
    
  • for문

    • 반복문 종료값이 명시적일 때 사용한다.
    # 작성방법
    for(변수 in 데이터) {
        반복 수행할 문장
    }
    
    # 예시
    for(i in 10:20) {
      print(paste(2, 'x', i, '=', 2*i))   # paste: 요소 사이 공백을 두고 출력
    }
    

3) 결측값 처리

결측값(missing value)이란 데이터 중 고의 혹은 실수로 누락된 값을 말합니다. 결측값은 데이터 수집 시 자주 발생하며, 해당 값이 데이터 분석 결과에 큰 영향을 미칠 수 있습니다.

일반적으로 해당 데이터를 삭제하거나 평균으로 대체합니다. 본 교안에서는 결측값을 제외하는 방식에 대해 다뤄보겠습니다.

결측값 처리 방법설명
is.naNA인 데이터 유무를 T/F로 나타낸다.
na.omitNA인 데이터가 포함된 행을 삭제한다.
함수의 속성 na.rm=T함수 수행 시 NA를 제외한다.
# R에서 기본적으로 제공해주는 airquality 데이터셋 이용

# 데이터 구조 살펴보기
str(airquality)

# airquality 데이터에서 NA 확인
head(is.na(airquality))

# NA 개수 확인 ← 자주 사용됨(★)
table(is.na(airquality))

# NA가 존재하는 속성 찾기
table(is.na(airquality$Temp))    # NA가 존재하지 않음
table(is.na(airquality$Ozone))   # NA가 존재함
  • is.na 함수 이용

    air_xNA = airquality[!is.na(airquality$Ozone), ]   # Ozone 속성에서 NA가 아닌 값만 추출
    
    table(is.na(air_xNA))   # NA가 줄어든 것을 확인할 수 있음
    mean(air_xNA$Ozone)     # 결측값이 제거된 데이터에서는 mean 함수가 정상 동작함
    
  • na.omit 함수 이용

    air_xNA2 = na.omit(airquality)   # NA 값이 포함된 모든 행 삭제
    
    table(is.na(air_xNA2))   # NA가 없어진 것을 확인할 수 있음
    mean(air_xNA2$Ozone)     # 결측값이 제거된 데이터에서는 mean 함수가 정상 동작함
    
  • 함수의 속성 na.rm=T 이용

    mean(airquality$Ozone, na.rm = T)
    

📖 참고하기: 데이터 파악에 사용되는 함수들

  • 데이터 내용 보기: 변수명, head(), tail(), View()
  • 데이터 형식 및 구조 파악: class(), str(), dim()
  • 요약된 정보 보기
    • summary(): 연속적인 값을 갖는 변수(numeric)에 사용
    • table(): 범주 값을 갖는 변수(factor)에 사용
마지막으로 업데이트 된 날짜:
2022년 9월 24일