我有一个名为data的数据框。我有一个名为ColB的列,其中包含所有NA值和一个名为ColC的列,其中包含所有整数值且没有NA。
当我使用子集语法时,我得到一些错误的结果(所有NAs):
nrow(data[data$ColB == "XXXX",])
但是当我使用哪个函数运行相同的语法时,我没有得到任何结果,正如我所期望的那样。
data[which(data$ColB== "XXXX"),]
另外,当我运行以下内容时:
{data[data$ColC == 185,]}
我得到正确的结果/输出,这是一个匹配的行。
这是为什么?这是关于在数据中使用NA的问题吗?并且是否通过列引用进行子集化(而不是使用子集函数)而不使用不推荐的那些?
答案 0 :(得分:1)
NA
是长度为1的逻辑常量,其中包含缺失值指示符。
例如which( c( NA,NA,NA) )
返回零长度整数向量,因为没有一个比较可以被视为TRUE
,就像您尝试which( c(FALSE,FALSE,FALSE) )
一样。因此,您试图将data.frame的子集整理为什么,不返回任何内容。
如果您需要使用NA
值的数据进行比较,请使用is.na()
功能,例如考虑:
x <- c( NA , is.na(NA) , NA )
which( x )
#[1] 2