본문 바로가기
코딩

[R 프로그래밍 기초] | 4.R에서 NA, NaN, Inf 차이 및 처리 방법 (데이터 전처리 필수 개념)

by 물리와 수학을 끄적이다. 2025. 9. 17.

R 프로그래밍에서 데이터를 다루다 보면 NA, NaN, Inf 같은 특수한 값들이 자주 등장합니다.
이 값들을 올바르게 이해하고 처리하지 않으면 데이터 분석 과정에서 오류가 발생할 수 있습니다.

이번 글에서는 R NA 처리, NaN 차이, Inf 의미와 활용법을 정리했습니다.

 


목차

 

1.  NA (결측치, Not Available)
2.  Inf (무한대, Infinity)
3. NaN (Not a Number, 정의 불가 값)
4. NA 처리 방법



1.  NA (결측치, Not Available)

NA는 데이터가 존재하지 않는 결측값을 의미합니다. 원래 데이터가 존재하긴하자 어떤한 방법으로 측정되지 않아 현재 우리가 알 수 없는, 즉 데이터가 없는 것이라고 생각하시면 되겠습니다.

value = c(3, 6, 23, NA, Inf)
value

출력 결과

[1]   3   6  23  NA Inf

NA 확인하기

any(is.na(value))   # NA가 하나라도 있니?
is.na(value)        # 각 값이 NA인지 확인

출력 결과

[1] TRUE
[1] FALSE FALSE FALSE  TRUE FALSE

이때 주의할 것은 값이 T와 F로 나온다는 것입니다. 


2.  Inf (무한대, Infinity)

0으로 나누면 Inf (무한대) 값이 발생합니다. 꼭 이러한 상황이 아니라도 극한을 취했을때 무한대가 나오는 상황 역시 inf로 출력이 됩니다. 

1/0
-1/0

출력 결과

[1] Inf
[1] -Inf

무한대 여부는 is.infinite()로 확인합니다. 위의 value값에 is.infinite를 입력합니다. 

is.infinite(value)

출력 결과

[1] FALSE FALSE FALSE FALSE  TRUE

3. NaN (Not a Number, 정의 불가 값)

수학적으로 정의되지 않는 값은 NaN이 됩니다. 데이터가 결측된 Na과는 다릅니다. 

log(-1)
0/0

출력 결과

[1] NaN
[1] NaN

4. NA 처리 방법

1) 합계에서 NA 제거하기

x = c(1, 2, 3, NA, 5, 6)
sum(x)              
sum(x, na.rm = T)   

출력 결과

[1] NA
[1] 17

👉 na.rm = TRUE 옵션을 사용하면 NA 무시하고 합계를 구할 수 있습니다.


2) NA 개수 세기

z = c(1, 2, 3, NA, 5, NA)
sum(is.na(z))   

출력 결과

[1] 2

is.na는 T/F로 나옵니다 T=1, F=0으로 계산 되기때문에 T계수는 세는 것과 동일합니다. 


3) NA를 특정 값으로 대체하기

z[is.na(z)] = 0
z

출력 결과

[1] 1 2 3 0 5 0

z에서 na인 인덱스를 0으로 교체하는 과정입니다..


4) NA 제거하기

x
as.vector(na.omit(x))  

출력 결과

[1]  1  2  3 NA  5  6
[1] 1 2 3 5 6

na.omit를 이용하여 na자체를 없앨수도 있습니다. 


5) NA 가 있는 경우의 합

벡터에 NA가 들어 있으면, 그대로 합계를 구할 때 결과가 NA로 나옵니다.

x = c(1, 2, 3, NA, 5, 6)
sum(x)

출력 결과

[1] NA

이유: NA가 하나라도 포함되어 있으면, 합계도 NA가 되어버립니다. 따라서 이를 제거해야합니다. 


6) NA 제거 후 합계 계산하기

이럴 때는 sum() 함수에서 na.rm = TRUE 옵션을 사용합니다.
na.rm은 NA 값을 제거(remove) 하겠다는 뜻입니다.

sum(x, na.rm = TRUE)

출력 결과

[1] 17

즉, 1 + 2 + 3 + 5 + 6 = 17 이 계산된 것입니다.


 

R NA, NaN, Inf 차이 정리

구분 의미 예시 확인 함수

NA 결측값 c(1, NA, 3) is.na()
Inf 무한대 1/0, -1/0 is.infinite()
NaN 정의 불가 0/0, log(-1) is.nan()

 


반응형