R数据帧子集概念

时间:2015-04-22 15:54:28

标签: r dataframe subset

我有一个名为data的数据框。我有一个名为ColB的列,其中包含所有NA值和一个名为ColC的列,其中包含所有整数值且没有NA。

当我使用子集语法时,我得到一些错误的结果(所有NAs):

nrow(data[data$ColB == "XXXX",])

但是当我使用哪个函数运行相同的语法时,我没有得到任何结果,正如我所期望的那样。

data[which(data$ColB== "XXXX"),]

另外,当我运行以下内容时:

{data[data$ColC == 185,]}

我得到正确的结果/输出,这是一个匹配的行。

这是为什么?这是关于在数据中使用NA的问题吗?并且是否通过列引用进行子集化(而不是使用子集函数)而不使用不推荐的那些?

1 个答案:

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