按NA级别设置一个因子

时间:2012-01-26 16:22:11

标签: r subset missing-data na r-factor

我在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 个答案:

答案 0 :(得分: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 :(得分:3)

作为Ben的后续行动:

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>