데이터 분석/R
[R] 데이터 정제하기
eunki
2021. 6. 25. 18:41
728x90
결측치 (Missing Value)
누락된 값 또는 비어있는 값을 의미한다.
함수 적용이 불가능하므로 분석 결과가 왜곡될 수 있다.
1. 결측치 생성 (NA)
df <- data.frame(sex = c("M", "F", NA, "M", "F"),
score = c(5, 4, 3, 4, NA))
df
2-1. 결측치 확인
is.na(df)
2-2. 결측치 빈도 출력
table(is.na(df))
3. 결측치가 포함된 상태로 분석
mean(df$score) # NA
sum(df$score) # NA
4. 결측치가 있는 행 제거
df_nomiss <- df %>% filter(!is.na(score) & !is.na(sex))
df_nomiss
5. 결측치를 제거한 데이터로 분석
mean(df_nomiss$score) # 4
sum(df_nomiss$score) # 16
추가) 모든 변수에 결측치 없는 데이터 추출
결측치가 하나라도 있으면 제거하기 때문에, 분석에 필요한 데이터까지 손실 될 가능성이 있다.
df_nomiss2 <- na.omit(df)
df_nomiss2
추가) 함수의 결측치 제외 기능 이용 (na.rm = T)
결측치 제외 기능을 지원하지 않는 함수도 있다.
mean(df$score, na.rm = T) # 4
sum(df$score, na.rm = T) # 16
결측치 대체하기
결측치가 많을 경우, 결측치를 모두 제외하면 데이터 손실이 크기 때문에 다른 값을 채워넣는다.
- 대표값(평균, 최빈값 등)으로 일괄 대체
- 통계분석 기법을 통해 예측값을 추정하여 대체
1. 결측치 생성
exam <- read.csv("csv_exam.csv")
exam[c(3, 8, 15), "math"] <- NA # 3, 8, 15행의 math에 NA 할당
2. 평균 구하기
exam %>% summarise(mean_math = mean(math)) # NA
exam %>% summarise(mean_math = mean(math, na.rm = T)) # 55.23529
mean(exam$math, na.rm = T) # 55.23529
3. 결측치 대체하기
exam$math <- ifelse(is.na(exam$math), 55, exam$math)
4. 결측치 빈도표 생성
table(is.na(exam$math))
5. 결측치를 제거한 데이터로 분석
mean(exam$math) # 55.2
728x90