[R] NA가 포함된 벡터의 평균 계산하기, NA를 평균값으로 대체하기

해당 포스트에서는 R에서 NA가 포함된 벡터의 평균을 계산하고 NA값을 평균값으로 대체하는 방법을 소개합니다.

1. INTRO

R에는 mean()이라는 평균을 계산해주는 함수가 있습니다. 숫자들로만 이루어진 벡터의 평균은 mean(x)와 같이 간단하게 계산이 가능하지만 변수 x에 결측값(NA, Not Available)가 있는 경우 평균 계산이 정상적으로 이루어지지 않습니다. 이러한 경우 어떻게 해결할 수 있는지, 그리고 NA값을 평균값으로 대체하려면 어떻게 하면 되는지에 대해 설명드리겠습니다.

2. 문제 풀이

1. NA가 없는 경우 평균 계산

먼저 숫자 벡터를 생성하고 평균을 구해보겠습니다.

숫자 벡터 생성

x <- 1:10
x
[1]  1  2  3  4  5  6  7  8  9 10

평균 계산

mean(x)
[1] 5.5

위 결과를 보면, 벡터가 숫자로만 구성된 경우 정상적으로 평균 계산이 되는 것을 알 수 있습니다. 이제 해당 데이터에 NA를 강제가 적용하여 평균을 계산해 보도록 하겠습니다.

2. NA가 있는 경우 평균 계산

기존 벡터에 NA 입력하기

x[c(2,7)] <- NA
x
[1]  1 NA  3  4  5  6 NA  8  9 10

벡터 x의 2번째, 7번째 원소에 NA가 정상적으로 입력된 것을 확인하였습니다. 이 때 평균을 계산하면 어떻게 될까요?

mean(x)
[1] NA

NA가 포함된 x 벡터의 평균을 구해보니 결과가 NA로 출력되었습니다. NA라는 계산 불가능한 수가 포함되어 있어 발생한 상황으로 분석가가 직접 데이터를 확인하여 NA값을 제거할 수도 있지만, mean() 함수에서 제공하는 결측값(NA) 제거 옵션인 na.rm 를 사용하시면 간단히 해결됩니다.

na.rm 옵션 사용하기

mean(x, na.rm = TRUE)
[1] 5.75

na.rm = TRUE 옵션을 통해 NA 값을 제외한 나머지 숫자들의 평균을 정상적으로 구하였습니다.

3. NA를 평균값으로 대체하기

현재 NA값으로 인해 x벡터에서 사용할 수 있는 데이터 갯수는 전체 10개중 8개로 줄어들었습니다(약 20% 데이터 손실). 데이터가 무수히 많고 결측값(NA)이 적다면 제거하고 분석해도 되지만, 일반적으로 데이터 손실을 막기위해 NA값을 다른 값으로 대체하여 분석하게 됩니다. 아래에서는 대체값으로 많이 사용되는 평균(mean)과 중위수(median)의 예시를 보여드리겠습니다.

NA를 평균값으로 변경

x[is.na(x)] <- mean(x, na.rm = TRUE)
x
[1]  1.00  5.75  3.00  4.00  5.00  6.00  5.75  8.00  9.00 10.00

위 결과를 보면 2, 7번째 NA가 평균값인 5.75로 대체된 것을 확인할 수 있습니다.

NA를 중위수로 변경

x[is.na(x)] <- median(x, na.rm = TRUE)
x
[1]  1.0  5.5  3.0  4.0  5.0  6.0  5.5  8.0  9.0 10.0

위 결과를 보면 2, 7번째 NA가 중위수인 5.5로 대체된 것을 확인할 수 있습니다.

3. 마무리

이번 포스트에서는 R에서 NA가 포함된 벡터의 평균을 구하고, 벡터 내 NA값을 구한 평균으로 대체하는 방법을 소개하였습니다. na.rm 옵션은 평균을 구하는 mean() 외에도 합을 구하는 sum(), 중위수를 구하는 median() 등 지원되는 함수들이 있으니 항상 함수 사용 전 help(함수명)으로 사용법을 확인하시는 습관을 들이시는게 좋습니다.


banner-request-analysis