### 데이터 정제 작업 : 결측치(빠진 데이터) / 이상치(이상한 데이터)
# 결측치(NA) 정제
# 1. NA 값 찾기
df <- data.frame(sex=c("M", "F", NA, "M", "F"),
score=c(5,4,3,4,NA)
)
# 데이터프레임으로부터 NA 값을 확인하는 함수 : is.na(데이터프레임)
# is.na() 실행 결과 : NA가 맞으면 TRUE / NA가 아니면 FALSE
is.na(df)
# 결측치 빈도표(table()) 생성
table(is.na(df))
table(is.na(df$sex))
table(is.na(df$score))
# 결측치 제거
# 1. 결측치만 걸러 내는 방법 (filter())
df %>% filter(is.na(score))
# 2. 결측치가 아닌 데이터만 걸러 내는 방법
df_nomiss <- df %>% filter(!is.na(score))
mean(df_nomiss$score)
sum(df_nomiss$score)
# 3. 결측치가 아닌 데이터만 걸러 내는 방법 : 여러개의 변수
df_nomiss <- df %>% filter(!is.na(score) & !is.na(sex))
# 4. 결측치가 존재하는 행을 한번에 제거하는 방법 : na.omit()
# na.omit(데이터프레임) : 데이터프레임으로부터 결측치가 발견되면 해당 행을 제거
df_nomiss2 <- na.omit(df)
# 5. 결측치를 제거하지 않고, 집계 함수를 이용하여 연산에서 제외 시킬 경우.
# na.rm 을 사용하면 된다, 단, 모든 함수에 지원되는 것은 아니다!!
mean(df$score)
mean(df$score, na.rm = T)
exam %>% summarise(mean_math=mean(math, na.rm = T))
# 데이터프레임의 변수 데이터 변경
exam[c(3,8,15), "math"] <- NA
# exam[c(변경될 행 번호리스트), 변경될 변수] <- 변경값
exam %>% summarise(mean_math=mean(math))
exam %>% summarise(mean_math=mean(math, na.rm = T))
exam %>% summarise(mean_math=sum(math, na.rm = T))
exam %>% summarise(mean_math=median(math, na.rm = T))
# 결측치 대체하기
# 대체 방법 : 평균, 최빈값, 대표값으로 대체.. / 통계분석기법으로 예측값을 추정
# 평균값을 이용하여 결측치를 대체
mean(exam$math, na.rm = T) # 55.23529 => 55 값을 대체 값으로..
exam$math <- ifelse(is.na(exam$math), 55, exam$math)
# 만약 exam의 math 변수의 값이 NA 이면 55, 그렇지 않으면 원래 값을 할당
table(is.na(exam$math))
'경기도 인공지능 개발 과정 > R' 카테고리의 다른 글
R ggplot2 (0) | 2022.04.17 |
---|---|
R 이상치 (0) | 2022.04.17 |
R 패키지 ggplot2, dplyr (0) | 2022.04.17 |
R 기본문법(summary, dplyr 패키지, ifelse, table, hist) (0) | 2022.04.17 |
R 기본문법 ( 변수, 연산, plot그리기, 데이터프레임생성) (0) | 2022.04.17 |