2012-01-26 20 views
8

Bir NA düzeyine sahip R'de bir faktör var.NA düzeylerine göre bir faktörü alt küme

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> 

Bu faktörü <NA> düzeyiyle nasıl ayırırım? Denediğim iki yöntem işe yaramadı.

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

karşı '' faktörü': "Uyarı: w ile ilgili bazı anomaliler vardır Bir seviye olarak "NA" olan faktörler. Sadece tablolama amaçlı, örneğin idareli kullanmak tavsiye edilir." –

cevap

8
Bunu yapmak için girişimleri işe yaramadı bana Şaşırtıcı

, ancak bu gibi görünüyor için:

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

Ben str(x) bakarak ve onu seviyeleri olduğunu görerek Yani içerideki değil altta yatan kodları, NA şunlardır: As

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

Ben' x [is.na (as.character (x))] 'da çalıştığını düşünüyorum. Ben bu davranışlara yanı şaşırdı. – joran

3

bir Ben'e takip:

str(x) size sorunu gösterir. Faktörler, dahili olarak bir çeşit "arama" ile tamsayı olarak depolanır. Yani:

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

ama

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

ve ben gösterdi olarak, vektörün gerçek değerleri yazdırmak için: Bu muhtemelen bir nedeni

> 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>