2016-09-05 3 views
1

NA 값의 요소 배열을 사용하면 이 누락 된 값을 추가 레벨로 대체하고 addNA 함수를 사용하면 편리합니다.addNA에 의해 생성 된 참조 팩터 레벨

x <- factor(c("a", "b", NA)) 

x 

## [1] a b <NA> 
## Levels: a b 

is.na(x) 

## [1] FALSE FALSE TRUE 

x2 <- addNA(x) 

x2 

## [1] a b <NA> 
## Levels: a b <NA> 

이 레벨은 어떻게 참조 할 수 있습니까? is.na 또는 일반적으로 필터를 사용하는 메서드를 호출하면 작동하지 않습니다.

is.na(x2) 

## [1] FALSE FALSE FALSE 

x2 == 'NA' 

## [1] FALSE FALSE FALSE 

x2 == '<NA>' 

## [1] FALSE FALSE FALSE 

답변

3

나는이 같은 깨끗하게 내가 할 수있는 관한 이해 할수 :

x <- factor(c("a", "b", "b", NA, "a", NA)) 
x2 <- addNA(x) 
x2 
#[1] a b b <NA> a <NA> 
#Levels: a b <NA> 

is.na(levels(x2))[x2] 
#[1] FALSE FALSE FALSE TRUE FALSE TRUE 
2

업데이트 (2016년 10월 4일) : 아니 긴 forcats 패키지가 출시 된이 질문을 한 후. 여기에는이 문제를 쉽게 해결하는 fct_explicit_na 함수가 포함되어 있습니다.


library(forcats) 
x <- factor(c("a", "b", "b", NA, "a", NA)) 
x2 <- fct_explicit_na(x) 
x2 

## [1] a   b   b   (Missing) a   (Missing) 
## Levels: a b (Missing) 

x2 == '(Missing)' 

## [1] FALSE FALSE FALSE TRUE FALSE TRUE 

는 게시 된 대답 또한 나는 droplevels를 사용하여도 작동 것으로 나타났습니다.

x <- factor(c("a", "b", "b", NA, "a", NA)) 
x2 <- addNA(x) 
x2 

## [1] a b b <NA> a <NA> 
## Levels: a b <NA> 

is.na(droplevels(x2)) 

## [1] FALSE FALSE FALSE TRUE FALSE TRUE 

(this answer에 따라) 또 다른 옵션은 뭔가 다른과 <NA> 수준을 교체하는 것입니다.

levels(x2)[is.na(levels(x2))] <- "isNA" 

x2 

## [1] a b b isNA a isNA 
## Levels: a b isNA 
+1

좋은 점 - 'is.na (factor (x2))'를 수행 할 수도 있습니다. – thelatemail

+1

사실입니다. 이 방법을 읽었을 때'droplevels.factor'는'factor '에 대한 호출 일뿐입니다. – NGaffney

관련 문제