본문 바로가기
R 주제/R 기초 및 통계 강의

[R강의] 165. 데이터프레임의 특정 열을 기준으로 결측치를 제거하는 방법

by 만다린망고 2023. 8. 29.
반응형

데이터프레임을 하나 만들어봅시다. 

v1=c(1,2,NA,4,NA)
v2=c(10,20,NA,NA,50)

df=data.frame(v1,v2)

 

> df
  v1 v2
1  1 10
2  2 20
3 NA NA
4  4 NA
5 NA 50


결측치를 제거할 건데요. NA가 포함된 모든 행을 제거하는 방법은 간단합니다. na.omit 함수를 적용하면 됩니다. 

> na.omit(df)
  v1 v2
1  1 10
2  2 20


오늘 우리가 하고 싶은 것은 이게 아닙니다. 특정 열을 기준으로 결측치를 제거하고 싶습니다. 예를 들어 1열을 기준으로 결측치를 제거하면 3,5행만 제거되는 것입니다.

1열을 기준으로 결측치를 제거하는 방법을 알아봅시다. 먼저 1열의 원소들이 NA인지 여부를 논리값으로 출력해봅시다. 

> is.na(df$v1)
[1] FALSE FALSE  TRUE FALSE  TRUE


위 벡터를 데이터프레임 df 의 행 인덱스로 입력하면 1열이 NA인 행만 출력됩니다. 아래와 같습니다. 

> df[is.na(df$v1),]
  v1 v2
3 NA NA
5 NA 50


1열이 NA가 아닌 경우만 출력하고 싶은 것이므로 is.na 앞에 부정 연산자 ! 를 붙여줍니다. 

> df[!is.na(df$v1),]
  v1 v2
1  1 10
2  2 20
4  4 NA


1열에서 NA인 경우만 제거되었습니다. 

이번에는 2열에서 NA인 경우만 제거해봅시다. 

> df[!is.na(df$v2),]
  v1 v2
1  1 10
2  2 20
5 NA 50


이번에는 1열과 2열 모두 NA인 경우만 제거해봅시다. 논리 연산자 & 를 사용합니다. 

> df[ !(is.na(df$v1)&is.na(df$v2)) ,]
  v1 v2
1  1 10
2  2 20
4  4 NA
5 NA 50
반응형

댓글