라일락 꽃이 피는 날

[R] 데이터 정제하기 본문

데이터 분석/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

'데이터 분석 > R' 카테고리의 다른 글

[R] t-test (t 검정)  (0) 2021.06.27
[R] 이상치 정제하기  (0) 2021.06.25
[R] 그래프 그리기  (0) 2021.06.25
[R] 데이터 전처리 (Preprocessing)  (0) 2021.06.25
[R] 파생 변수 생성  (0) 2021.06.19