Notes
#결측치가 있는 데이터 프레임 생성
> df = data.frame(gender=c("M","F",NA,"M",'F'),
+ score=c(5,4,3,NA,6))
> df
gender score
1 M 5
2 F 4
3 <NA> 3
4 M NA
5 F 6
# 데이터 프레임의 구조(structure)
> str(df)
'data.frame': 5 obs. of 2 variables:
$ gender: Factor w/ 2 levels "F","M": 2 1 NA 2 1 w/ : with
$ score : num 5 4 3 NA 6
> df %>% filter(is.na(gender))
gender score
1 <NA> 3
> df %>% filter(!is.na(gender))
gender score
1 M 5
2 F 4
3 M NA
4 F 6
#is.na(): NA는 True, NA가 아니면 False를 리턴하는 함수
> is.na(df) # 데이터 프레임의 각 원소 NA 여부를 출력 !!
gender score
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] TRUE FALSE
[4,] FALSE TRUE
[5,] FALSE FALSE
# df 데이터 프레임에서 성별 score의 평균 출력
> df %>%
+ group_by(gender) %>%
+ summarise(mean=mean(score))
# A tibble: 3 x 2
gender mean
<fct> <dbl>
1 F 5
2 M NA
3 NA 3
Warning message:
Factor `gender` contains implicit NA, consider using `forcats::fct_explicit_na`
# df 데이터 프레임에서 성별 score의 평균 출력
> df %>%
+ filter(!is.na(gender)&!is.na(score))
gender score
1 M 5
2 F 4
3 F 6
> mean(df$score,na.rm=T) null값 처리하기
[1] 4.5
table() : 도수분포표
> table(is.na(df$gender))
FALSE TRUE
4 1
> table(is.na(df))
FALSE TRUE
8 2
# 1) 0으로 대체
df$score= ifelse(is.na(df$score), 0, df$score)
df
df %>% group_by(gender) %>% summarise (mean = mean(score))
# 2) 평균값으로 대체
df[4,2]=NA # df[ 4, score ] 가능
# NA를 제외한 평균 값
avg = mean(df$score, na.rm=T)
df$score = ifelse(is.na(df$score), avg, df$score)
df
df %>% group_by(gender) %>% summarise(mean = mean(score))
df <- na.omit(df)
> df
gender score
1 M 5
2 F 4
5 F 6
# 이상치(outlier) : 논리적으로 들어갈 수 없는 값, 있어서는 안될 값.
movie_rating = data.frame(rating = c(5,4,3,4,5,2,3,3,5,10))
movie_rating
# 영화 별점은 1~5점까지만 가능하며, 10점은 존재해서는 안될 값.
movie_rating$rating <-
ifelse(movie_rating$rating %in% c(1:5), movie_rating$rating,NA)
> boxplot(mpg$hwy)
> boxplot(mpg$hwy)$stats
[,1]
[1,] 12
[2,] 18
[3,] 24
[4,] 27
[5,] 37
attr(,"class")
1
"integer"
>mean(mpg$hwy) : 23.44017 - outlier가 포함된 값
>mpg$hwy <- ifelse(mpg$hwy < 12 | mpg$hwy>37, NA, mpg$hwy)
# NA 갯수를 확인
>table(is.na(mpg$hwy))
FALSE TRUE
231 3
>mean(mpg$hwy,na.rm=T) : 23.18615 - outlier가 제외된 값