R:is.na()没有拿起NA值

时间:2015-05-21 18:01:02

标签: r

所以我有一个数据集,只是通过查看它,数据集中有明确的NA。

ld

我想删除任一列中包含NA的任何行,因此我使用ForImp包中的列表删除函数is.na(bmi.cig$MSI.subset.BMI) 。但是,R没有识别NA值。

    > is.na(bmi.cig$MSI.subset.BMI)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[26] FALSE FALSE FALSE FALSE FALSE

我得到了

ld

因此,一旦我使用{{1}}函数,我就会获得一个空数据集。

2 个答案:

答案 0 :(得分:4)

它的b / c列是因子,级别是"NA"。即,尝试

data <- structure(list(MSI.subset.BMI = structure(c(4L, 4L, 4L, 4L, 4L, 
+ 4L, 4L, 4L, 4L, 4L, 4L, 1L, 2L, 3L, 3L, 1L, 3L, 3L, 1L, 4L, 4L, 
+ 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("0", "1", "2", 
+ "NA"), class = "factor"), MSI.subset.Cigarette = structure(c(3L, 
+ 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 1L, 2L, 1L, 2L, 
+ 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("1", 
+ "2", "NA"), class = "factor")), .Names = c("MSI.subset.BMI", 
+ "MSI.subset.Cigarette"), row.names = c(NA, 30L), class = "data.frame")
> class(blah[,1])

data[,1]=="NA"

NA实际上是字符(class("NA")),而不是logical之类class(NA)

答案 1 :(得分:2)

正如@rbatt所提到的,你将字符NA值作为因子水平。您可以删除它们并获取NA条目以使用

注册为整个数据集的真实NA
df[] <- lapply(df, function(x) {
    is.na(levels(x)) <- levels(x) == "NA"
    x
})

其中df是您的数据集。现在用

进行测试
is.na(df)