2012-01-26 3 views
8

NA 수준의 R 요소가 있습니다.NA 수준별 인수 하위 집합

set.seed(1) 
x <- sample(c(1, 2, NA), 25, replace=TRUE) 
x <- factor(x, exclude = NULL) 
> x 
[1] 1 2 2 <NA> 1 <NA> <NA> 2 2 1 1 
[12] 1 <NA> 2 <NA> 2 <NA> <NA> 2 <NA> <NA> 1 
[23] 2 1 1 
Levels: 1 2 <NA> 

레벨을 <NA> 수준으로 하위화하려면 어떻게합니까? 시도한 두 가지 방법 모두 작동하지 않았습니다.

> x[is.na(x)] 
factor(0) 
Levels: 1 2 <NA> 
> x[x=='<NA>'] 
factor(0) 
Levels: 1 2 <NA> 
+2

대를 '? factor'는 다음과 같습니다. "경고 : 몇 가지 예외가 있습니다. i 수준에 'NA'가있는 요인. 예를 들어 표를 만들 때만 사용하는 것이 좋습니다. " –

답변

8
이 작업을 수행하는 사용자의 시도가 작동하지 않았다 나에게 놀라운

하지만,이 보인다에 :

x[is.na(levels(x)[x])] 

내가 str(x)보고는 수준 것을 확인하여 거기에 도착하는 하지 기본 코드, NA 있습니다으로

str(x) 
Factor w/ 3 levels "1","2",NA: 1 2 2 3 1 3 3 2 2 1 ... 
+1

x 'is.na (as.character (x))]'도 작동한다고 생각합니다.이 동작에서도 나는 놀랐습니다. – joran

3

벤 후속 :

str(x)에 문제가 표시됩니다. 요소는 내부적으로 정렬 형식의 "조회"로 정수로 저장됩니다. 그래서 :

> all(is.na(x)) 
[1] FALSE 

하지만

> any(is.na(levels(x))) 
[1] TRUE 

와 벤이 가리 켰을 때, 벡터의 실제 값 인쇄 : 이것은 아마도 이유 중 하나입니다

> levels(x)[x] 
[1] "1" "2" "2" NA "1" NA NA "2" "2" "1" "1" "1" NA "2" NA "2" NA NA "2" NA NA  "1" "2" "1" "1" 

> x 
[1] 1 2 2 <NA> 1 <NA> <NA> 2 2 1 1 1 <NA> 2 <NA> 2 <NA> <NA> 2 <NA> <NA> 1 2 1 1 
Levels: 1 2 <NA>