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