86. 결측치(NA) 확인, 제거, 수정하는 방법
오늘 사용할 데이터입니다.
C1=c(1,2,NA,NA,5)
C2=(1,2,3,4,5)
C3=(NA,2,3,4,5)
md=data.frame(C1,C2,C3)
> md
C1 C2 C3
1 1 1 NA
2 2 2 2
3 NA 3 3
4 NA 4 4
5 5 5 5
1) 결측치 확인
결측치를 확인할 때는 is.na( ) 함수를 사용합니다. 위 데이터프레임에 적용해봅시다.
C1=c(1,2,NA,NA,5)
C2=(1,2,3,4,5)
C3=(NA,2,3,4,5)
md=data.frame(C1,C2,C3)
> is.na(md)
C1 C2 C3
[1,] FALSE FALSE TRUE
[2,] FALSE FALSE FALSE
[3,] TRUE FALSE FALSE
[4,] TRUE FALSE FALSE
[5,] FALSE FALSE FALSE
원소 개수가 많지 않아 눈으로 확인이 가능합니다. NA가 있는 위치에 TRUE가 표시됩니다.
만약 원소의 개수가 굉장히 많다면 눈으로 확인이 어려울 것입니다. 이럴 때는 NA의 수를 계산해주면 됩니다. 0이 아닌 결과가 나왔다면 NA가 포함되어 있는 것입니다.
> sum(is.na(md))
[1] 3
2) NA 제거
na.omit() 함수를 사용하여 NA가 포함된 행을 제거합니다.
C1=c(1,2,NA,NA,5)
C2=(1,2,3,4,5)
C3=(NA,2,3,4,5)
md=data.frame(C1,C2,C3)
> na.omit(md)
C1 C2 C3
2 2 2 2
5 5 5 5
3) NA를 다른 값으로 수정
NA를 다른 값으로 변경해봅시다. 열별로 수정이 가능합니다.
첫번째 열을 수정해봅시다.
C1=c(1,2,NA,NA,5)
C2=(1,2,3,4,5)
C3=(NA,2,3,4,5)
md=data.frame(C1,C2,C3)
> md$C1[is.na(md$C1)]=100
> md
C1 C2 C3
1 1 1 NA
2 2 2 2
3 100 3 3
4 100 4 4
5 5 5 5
원리를 알아봅시다. is.na(md$C1)은 md의 C1열에서 NA인 원소를 TRUE로, 아닌 원소를 FALSE로 반환합니다.
> is.na(md$C1)
[1] FALSE FALSE TRUE TRUE FALSE
이 값을 다시 인덱스로 사용하면, NA가 있는 원소에만 접근하게 됩니다.
> md$C1[is.na(md$C1)]
[1] NA NA
NA가 있는 원소에만 접근하여 이 값에 100을 넣어주는 것입니다.
영상이 더 편하신 분
'R 주제 > R 기초 및 통계 강의' 카테고리의 다른 글
[R 강의] 88. 히스토그램 여러 개 겹쳐서 그리는 방법 (0) | 2020.05.19 |
---|---|
[R 강의] 87. 마진(margin)과 테두리 선 넣기 (0) | 2020.05.18 |
[R 강의] 85. R에서 정의된 벡터는 열벡터일까 행벡터일까 (0) | 2020.04.04 |
[R 강의] 84. 행렬의 곱셈 (0) | 2020.04.04 |
[R 강의] 83. 행렬 또는 데이터프레임의 행과 열을 바꾸는 방법 t() (0) | 2020.04.02 |
댓글