티스토리 뷰

Data Science/R package

결측치 제거

jsBae 2022. 5. 1. 21:21
> #함수의 결측치 제외 기능 이용하기 - na.rm = T
> mean(df$score, na.rm=T)
[1] 4​
> library(dplyr)
> df %>% filter(is.na(score))
  sex score
1   F    NA
> df %>% filter(!is.na(score))
   sex score
1    M     5
2    F     4
3 <NA>     3
4    M     4

> sum(df_nomiss$score)
[1] 16
> df_nomiss <- df %>% filter(!is.na(score)&!is.na(sex))
> df_nomiss
  sex score
1   M     5
2   F     4
3   M     4​
> df <- data.frame(sex = c("M", "F", NA, "M", "F"),
+                  score = c(5, 4, 3, 4, NA))
> df
   sex score
1    M     5
2    F     4
3 <NA>     3
4    M     4
5    F    NA
> is.na(df)
       sex score
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,]  TRUE FALSE
[4,] FALSE FALSE
[5,] FALSE  TRUE
> anyNA(df)
[1] TRUE
> table(is.na(df))

FALSE  TRUE 
    8     2 
> table(is.na(df$sex))

FALSE  TRUE 
    4     1 
> table(is.na(df$score))

간단하게 na.omit()

> df_nomiss <- na.omit(df)
> df_nomiss
  sex score
1   M     5
2   F     4
4   M     4

#함수의 결측치 제외 기능 이용하기 - na.rm = T

> mean(df$score, na.rm=T)
[1] 4

exam %>% summarise(mean_math = mean(math, na.rm = T),      # 평균 산출
                   sum_math = sum(math, na.rm = T),        # 합계 산출
                   median_math = median(math, na.rm = T)) # 중앙값 산출

# 결측치 대체법(Imputation)

• 대표값(평균, 최빈값 등)으로 일괄 대체
• 통계분석 기법 적용, 예측값 추정해서 대체

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

> mean(exam$math, na.rm = T)
[1] 58.17647
> #평균으로 대체하기
> exam$math <- ifelse(is.na(exam$math), 58, exam$math)
> table(is.na(exam$math))

FALSE 
   20

mpg 데이터를 이용해서 분석

> library(ggplot2)
> mpg
> mpg <- as.data.frame(mpg)
> colnames(mpg)
 [1] "manufacturer" "model"        "displ"        "year"         "cyl"          "trans"       
 [7] "drv"          "cty"          "hwy"          "fl"           "class"       
> mpg[c(65, 124, 131, 153, 212), "hwy"] <- NA
> table(is.na(mpg))

FALSE  TRUE 
 2569     5

Q1. drv(구동방식)별로 hwy(고속도로 연비) 평균이 어떻게 다른지 알아보려고 합니다. 분석을 하기 전에 우선 변수에 결측치가 있는지 확인해야 합니다. drv 변수와 hwy 변수에 결측치가 있는지 알아보세요.

> table(is.na(mpg$drv))

FALSE 
  234 
> table(is.na(mpg$hwy))

FALSE  TRUE 
  229     5

Q2. filter() 이용해 hwy 변수의 결측치를 제외하고, 어떤 구동방식의 hwy 평균이 높은지 알아보세요. 하나의 dplyr 구문으로 만들어야 합니다.

> mpg %>% 
+   filter(!is.na(hwy)) %>% 
+   group_by(drv) %>% 
+   summarise(mean_hwy=mean(hwy))
# A tibble: 3 x 2
  drv   mean_hwy
  <chr>    <dbl>
1 4         19.2
2 f         28.2
3 r         21

 

728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
반응형