9

NAレベルのRに係数があります。

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

2 に答える 2

9

これを行う試みがうまくいかなかったことは私には驚きですが、これは次のようです:

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 ...
于 2012-01-26T16:33:06.893 に答える
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>
于 2012-01-26T16:38:22.970 に答える