EMDI는 지금도 개발중

R데이터분석 : 데이터 정제, 빠진 데이터 제거하기 (결측치 정제) 본문

IT/R 데이터분석

R데이터분석 : 데이터 정제, 빠진 데이터 제거하기 (결측치 정제)

EMDI 2019. 9. 23. 13:05

1. 데이터 결측치 찾기

* 샘플데이터 만들기

df <- data.frame(sex = c("M", "F", NA, "M", "F"),
                 score = c(5,4,3,4,NA));

is.na(df); //결측치 확인
table(is.na(df)); //결측치 빈도 출력

 

table(is.na(df$sex)) //성별 컬럼만 빈도 출력
mean(df$score) //점수의 평균을 구하려고하면 NA라는 데이터가 있기떄문에 결과값은 NA가 나온다.

 

2. 결측치 제거하기 filter() 이용

* is.na()를 filter()에 적용하면 결측치가 있는 행을 제거할 수 있다. 먼저 결측치가 있는 행만 추출한 다음 제거하기!

df %>% filter(is.na(score))
df <- df %>% filter(!is.na(score)) // is.na()앞에 '아니다'를 의미하는 ! 기호를 붙여 !is.na()를 입력하면 NA가 아닌 값을 출력할 수 있다.

df %>%  filter(is.na(sex))
df <- df %>%  filter(!is.na(sex))

 

3. 결측치가 하나라도 있으면 바로 제거할 수 있는 함수 na.omit()

* na.omit()은 결측치가 하나라도 있으면 모두 제거하기 때문에 간편한 측면이 있지만, 분석에 필요한 행까지 제거할 수 있다는 단점이 있다.

df_nomiss <- na.omit(df);

 

4. 결측치 제외기능 이용하기

mean(df$score, na.rm = T) //결측치 제외하고 평균 산출
sum(df$score, na.rm = T) //결측치 제외하고 합계 산출

 

Q. csv파일을 이용하여 na.rm을 사용하기

exam <- read.csv("text_csv.csv"); //데이터 불러오기
exam[c(3, 8, 11), "math"] <- NA // 3, 8, 11행의 math에 NA할당하기

* 코드에서 [] 대괄호는 데이터의 위치를 지칭하는 역할을 합니다. 대괄호 안에서 쉼표 왼쪽은 '행위치', 오른쪽은 '열위치'를 의미합니다.

 

exam %>% summarise(mean_math = mean(math)) //평균산출해서 mean_math 변수에 넣기

위의 결과값은 결측치가 있기 때문에 NA로 나옴

 

//평균산출해서 mean_math 변수에 넣는데 na.rm을 이용해서 결측치 제외

exam %>% summarise(mean_math = mean(math, na.rm = T))
exam %>% summarise(mean_math = mean(math, na.rm = T),
                   sum_math = sum(math, na.rm = T),
                   median_math = median(math, na.rm = T)) 

 

5. 평균값으로 결측치 대체하기

exam$math <- ifelse(is.na(exam$math), mean(exam$math, na.rm = T), exam$math)

 

Comments