2. 데이터 취득 및 정제 > 2-2. 결측값 처리하기
결측값 처리하기
데이터를 분석하다 보면, 특정 조건에 부합하는 값을 찾아내거나 데이터의 일부를 추출하는 등의 작업을 하게 됩니다. 이번 장에서는 해당 작업을 편리하게 해주는 '조건문'과 '반복문'을 살펴본 뒤, 대표적인 데이터 정제 작업 '결측값 처리'에 대해 학습해 보겠습니다.
조건에 부합하는 값을 추출하는 방법은 다음과 같습니다.
[ ]에 행/열 조건 명시하기
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
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: 요소 사이 공백을 두고 출력
}
결측값(missing value)이란 데이터 중 고의 혹은 실수로 누락된 값을 말합니다. 결측값은 데이터 수집 시 자주 발생하며, 해당 값이 데이터 분석 결과에 큰 영향을 미칠 수 있습니다.
일반적으로 해당 데이터를 삭제하거나 평균으로 대체합니다. 본 교안에서는 결측값을 제외하는 방식에 대해 다뤄보겠습니다.
결측값 처리 방법 | 설명 |
---|---|
is.na | NA인 데이터 유무를 T/F로 나타낸다. |
na.omit | NA인 데이터가 포함된 행을 삭제한다. |
함수의 속성 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)에 사용