상위 5%의 값을 제외하는 함수를 작성해봅시다.
참고로 제가 가지고 있는 데이터프레임은 '지역별 사교육비금액 데이터'입니다.
설문조사 대상이 지불하는 일주일 일반교과 사교육비 액수 데이터가 담겨있습니다.
지금부터 저는 지역별로 지불 상위 5%인 사람들을 NA처리하려 합니다.
다음은 금액값의 상위 5%를 제외해주는 함수입니다.
일단 함수의 인자 a로는 어느 지역의 상위%를 다룰지 설정해주기 위해 '지역명'을 넣겠습니다.
참고로 초등학생 사교육비금액이 담긴 제 데이터프레임 이름은 초등박스플롯입니다.
(오로지 박스플롯을 그리기 위한 데이터프레임이었기 때문에 그냥 그렇게 정했습니다.)
상위5 <- function(a){
print("제거 전")
print(초등박스플롯 %>% filter(시도==a & is.na(금액)) %>% dplyr::summarise(건수=n()))
# 시도명이 a인 데이터만 따로 담아두고 상위0.05값 계산
a지역데이터 <- 초등박스플롯 %>% filter(시도==a)
상위0.05값 = qnorm((1-0.05),
mean = mean(a지역데이터$금액),
sd = sd(a지역데이터$금액))
# 상위 n%에 해당하는 금액데이터를 NA처리합니다.
a지역데이터$금액 =
ifelse(a지역데이터$금액>=상위0.05값,
NA, a지역데이터$금액)
sprintf("%s 지역의 상위%f값 제외완료", a, 0.05)
print(a지역데이터 %>% filter(is.na(금액)) %>% dplyr::summarise(건수=n()))
# NA처리 왼료한 데이터프레임을 리턴합니다.
return(a지역데이터)
}
코드 중간중간에 NA제거전, 제거후를 확인해주기 위한 print 장치를 삽입해두었습니다.
이제 함수를 실행해봅시다.
함수 매개변수를 '서울'로 설정해 함수 인자로 넣어주어 상위 5%값을 NA처리한 새로운 데이터셋을 리턴해봅시다.
제거 전은 아무 NA도 확인되지 않습니다.
제거 후 NA는 120건으로 확인됩니다.
다른 지역도 해볼까요? 대전 해봅시다.
제거 전은 속성이 NA인 건수가 0입니다.
제거 후는 속성이 NA인 건수가 41건입니다.
^-^
반응형
'데이터분석과 머신러닝' 카테고리의 다른 글
R데이터분석 | 분산분석, 사후분석으로 지역별통계량 분석 (0) | 2021.09.15 |
---|---|
R데이터분석 | 일원배치 분산분석 - 그리고 사후분석 (0) | 2021.09.14 |
R데이터분석 - 데이터 불러오기 오류 해결 | read.csv | invalid multibyte string (10) | 2021.08.23 |
[데이터분석] 공공데이터 사이트 정리 | 국내 무료데이터 총집합 (0) | 2021.08.20 |
회귀분석 - R데이터분석을 위한 통계학 공부 (0) | 2021.08.16 |