所以我有一个数据集,只是通过查看它,数据集中有明确的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}}函数,我就会获得一个空数据集。
答案 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)