본문 바로가기

AI & Computer Science

R 프로그래밍에서 결측치(NA) 처리 및 연산 방법

반응형
결측치(NA) 처리

R 프로그래밍에서 결측치(missing value)는 NA(Not Available)라는 문자로 처리됩니다. 또한, NaN(Not a Number)은 분모를 0으로 나누는 것과 같이 계산이 불가능한 경우 출력되는 문자입니다. 이 글에서는 NA를 처리하는 방법과 결측치가 포함된 데이터에 대한 연산 방법을 알아보겠습니다.

 

1. 결측치의 기본 이해

R에서 결측치는 NA로 표시됩니다. 예를 들어, 다음과 같은 벡터 y가 있을 때:
y <- c(1, 2, 3, NA)
 
is.na() 함수는 벡터에 결측치가 존재하는 경우 TRUE를 반환합니다.
is.na(y)
# [1] FALSE FALSE FALSE  TRUE
 
결측치가 포함된 벡터 y에 대해 요약 통계를 구하면 다음과 같이 결과에 NA's 항목이 포함됩니다.
summary(y)
# Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
# 1.0     1.5     2.0     2.0     2.5     3.0       1

 

2. 특정 값을 결측치로 변환하기

특정 값을 NA로 변환할 수 있습니다. 예를 들어, 다음의 벡터 ages에서 -999 값을 NA로 변경해보겠습니다.
ages <- c(48, 78, 56, 88, -999, 13, 26, -999)
ages[ages == -999] <- NA
 
변경된 벡터는 다음과 같습니다.
print(ages)
# [1]  48  78  56  88  NA  13  26  NA

 

3. 결측치가 포함된 데이터의 연산

결측치가 포함된 데이터를 연산하게 되면 결과는 NA가 됩니다. 예를 들어, 다음과 같이 sum 및 mean 함수를 적용하면 NA가 반환됩니다.
 
sum(ages)
# [1] NA

mean(ages)
# [1] NA
하지만, na.rm = TRUE 매개변수를 사용하여 결측치를 제외하고 연산할 수 있습니다.
sum(ages, na.rm = TRUE)
# [1] 309

mean(ages, na.rm = TRUE)
# [1] 51.5

 

4. 결측치를 포함한 데이터프레임 처리

결측치가 있는 행을 삭제하거나, 결측치가 없는 데이터만 필터링할 수 있습니다. 예제로 다음과 같은 patients 데이터프레임이 있다고 가정합니다.
weight <- c(65.4, 55, 380, 72.2, 51, NA)
height <- c(170, 155, NA, 173, 161, 166)
gender <- c("M", "F", "M", "M", "F", "F")
testDate <- c("2013/09/01", "2013/09/01", "2013/09/05", "2013/09/14", "2013/10/11", "2013/10/26")
patients <- data.frame(weight = weight, height = height, gender = gender, testDate = testDate)
 
이 데이터프레임에서 결측치가 있는 행을 제외하고 나머지 데이터를 출력하려면 na.omit() 함수를 사용합니다.
na.omit(patients)
 
또한, complete.cases() 함수는 결측치가 없는 행에 대해 TRUE를 반환하며, 이를 통해 필터링할 수 있습니다.
patients[complete.cases(patients),]
 

 

5. 결측치를 제외한 연산

patients 데이터프레임에서 weight와 height 열만 가져와 연산하는 예제입니다.
patients.sub <- patients[, c("weight", "height")]
apply(patients.sub, 2, mean, na.rm = TRUE)
 

 

6. 날짜 데이터 처리

patients 데이터프레임의 testDate 열을 실제 날짜 형식으로 변환하고 날짜 간의 차이를 계산할 수 있습니다.
patients$testDate <- as.Date(testDate)
patients$testDate[5] - patients$testDate[1]
# Time difference of 40 days
 
as.numeric()을 사용해 날짜 차이를 일 수로 변환할 수도 있습니다.
as.numeric(patients$testDate[5] - patients$testDate[1])
# [1] 40

 

 

 

 

마무리

이번 포스팅에서는 R 프로그래밍에서 결측치(NA)를 처리하고, 이를 연산에서 제외하는 방법을 다루었습니다.

결측치는 데이터 분석 과정에서 흔히 접하게 되는 문제이며, 이를 적절히 처리하는 것이 정확한 분석 결과를 얻는 데 중요합니다.

 

이 글이 여러분의 R 프로그래밍에 도움이 되기를 바랍니다.

반응형