2012-01-26 128 views
8

我在R中有一個因子,具有NA級別。按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'有:「警告:有一些與w相關的異常因爲有「不適用」的水平。建議使用它們,例如,僅用於製表目的。「 –

回答

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>