도구 R로 푸는 통계 86. 결측치(NA) 확인, 제거, 수정하는 방법 오늘 사용할 데이터입니다. C1=c(1,2,NA,NA,5) > md 1) 결측치 확인
C1=c(1,2,NA,NA,5) > is.na(md) 원소 개수가 많지 않아 눈으로 확인이 가능합니다. NA가 있는 위치에 TRUE가 표시됩니다. 만약 원소의 개수가 굉장히 많다면 눈으로 확인이 어려울 것입니다. 이럴 때는 NA의 수를 계산해주면 됩니다. 0이 아닌 결과가 나왔다면 NA가 포함되어 있는 것입니다. >
sum(is.na(md))
na.omit() 함수를 사용하여 NA가 포함된 행을 제거합니다. C1=c(1,2,NA,NA,5) > na.omit(md)
NA를 다른 값으로 변경해봅시다. 열별로 수정이 가능합니다. 첫번째 열을 수정해봅시다. C1=c(1,2,NA,NA,5) > md$C1[is.na(md$C1)]=100
> is.na(md$C1)
>
md$C1[is.na(md$C1)]
영상이 더 편하신 분 결측값 (NA)결측값 확인하기결측값을 제거하기 위해서는 미리 결측값의 갯수와 결측값이 포함되어 있는 컬럼을 아는 것이 중요합니다.
방법1. colSums() 사용하기
방법2. sapply() 사용하기
제거데이터셋 전체 결측값 제거하기
가장 흔한 na.omit() 사용하기
complete.cases 사용하기
특정 컬럼을 선택하여 결측값 제거하기파이프 연산자(%>%) 사용하기 정확히 말하자면, 제거를 하는 것이 아닌 특정 컬럼의 결측값을 제외한 나머지를 선택하는 방법입니다.
대체결측값에 직접 값 넣기mass, pressure컬럼의 결측값을 각 컬럼의 중앙값으로 대체 결측값 수 미리 확인
중앙값 미리 생성
glucose컬럼의 결측값 확인
glucose 컬럼의 중앙값인 방법2. impute() 함수 impute함수를 사용하면 위 방법보다 훨씬 간단하게 결측값을 원하는 값으로 대체 가능합니다. 혹시나 이 방법을 보시는 분 중 빅분기를 준비중이시라면 이 방법은 추천드리지 않습니다. impute함수는 Hmisc라이브러리를 사용하는데, Hmisc라이브러리는 시험장에서 사용할 수 없기때문입니다.
head출력 결과에서 *이 붙은 곳을 보면 NA였던 자리인데, 현재 mass의 중앙값인 참고로 *은 제가 붙여준것이 아닌 impute함수를 사용하면 자동으로 표시 됩니다. 실제로 데이터에 붙은것은 아니기때문에 문제가 되지 않습니다. 또한 여기서는 중앙값을 미리 계산해서 넣어줬지만,
그냥 impute옵션으로 median이나 mean 명령어를 줘서 중앙값, 평균으로도 곧바로 대체가 가능합니다. 사실상 가장 편한 대체 방법인 것 같습니다. 방법3. for문과 if문 사용하기 혹시 빅분기 시험 중 다른 함수나 방법이 생각나지 않는다면, 코드는 길지만 가장 원시적인 for문과 if문을 사용해도 괜찮은 방법입니다.
방법4. fill함수 사용하기 library(tidyr)의 fill 함수를 사용하면 결측값을 위 아래의 값으로 대체 할 수 있습니다. 결측값 대체 전
fill 함수 적용
결측값이 있을 때의 자료와 바뀐 후의 자료를 잘비교해보시면 어떤 함수인지 바로 감을 잡으실 수 있으실 겁니다. NA가1 ~ 3 까지 있고 94부터 값이 있습니다 이 경우는 up을 기준으로 94의 값을 채워주었습니다. fill함수의 .direciton 옵션은 'up', 'down', 'updown', 'downup'의 4가지 옵션이 있으니 선택하시면 됩니다. 단, 'up', 'down'은 애매하게 첫번째나 마지막에 결측값이 있을 경우, 결측값 처리가 되지 않을 수도 있으니, 저는 'updown'이나 'downup'을 추천드립니다. 보통 이 방법은 factor형의 자료구조에 결측값이 있을 때 채우는 방식인데, 번외결측값의 범위를 지정하기대게 NA가 결측값이긴 하지만, 그냥 빈칸인 ""이나 무작정 어떤 값이 결측값으로 지정될 수 도 있습니다. 이럴 때는 조금 야매이긴 하지만 방법이 있습니다. 예를 들어 csv파일을 읽어와서 데이터 셋으로 만든다고 했을 때 입니다.
해당 csv파일을 main 데이터 셋으로 불러왔을 경우
하지만,
301번 부터 보면, 그냥 값이 전부 입력되지 않았습니다. 다시 한번 read.csv를 실행해보겠습니다
이번에는 아까와 다르게
심지어 아까처럼 이상 R에서 결측값과 관련된 팁이었습니다. 감사합니다. |