为什么返回这些NAs?

时间:2014-02-13 05:07:38

标签: r dataframe

请原谅这个糟糕的问题标题......我想不出怎么以更好的方式提问。

我认为代码本身就说明了,但只是为了解决这个问题,我在数据框中搜索了一个编码值,用NA替换了它们,但在检查它们是否已经消失时我得到了一个令人惊讶的结果(对我来说。

> df[df==-999.25]
 [1] "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000"
 [6] "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000"
[11] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[16] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[21] "-9.992500e+02" "-9.992500e+02" "-999.25000000" "-999.25000000" "-999.25000000"
[26] "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000"
[31] "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000" "-999.25000000"
[36] "-999.25000000" "-999.25000000" "-999.25000000" "-9.992500e+02" "-9.992500e+02"
[41] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[46] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[51] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[56] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
[61] "-9.992500e+02" "-9.992500e+02" "-9.992500e+02" "-9.992500e+02"
> df[df==-999.25] <- NA
> df[df==-999.25]
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[30] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[59] NA NA NA NA NA NA

我很困惑。它是什么原因? (我也累了,也许我应该坐上这一两天)。我检查了'&lt; - '和'['的帮助,但没有学到任何东西(我无法全部学习)。

2 个答案:

答案 0 :(得分:3)

当你使用==时,如果它们存在,则总会返回NA,因为比较NA的结果是默认返回的NA。如果你想要它们,那么你需要添加& !is.na(df)

例如

test <- c(NA,5,3,2,34,"Bob")
test[test == "Bob"]
[1] NA    "Bob"

,因为

test == "Bob"
[1] NA FALSE FALSE FALSE FALSE  TRUE

答案 1 :(得分:1)

当您将NA分配给对象时,意味着您不知道该对象内部是什么,缺少值,因此逻辑语句和算术计算为* +&lt; ==&gt;不能对缺失值应用,R对此情况返回NA做出反应:

a <- NA

a * 0
[1] NA

a/0
[1] NA

a<0
[1] NA

a == 0
[1] NA

最后,我猜你在False中期望结果为NA而不是df[df==-999.25],但是当R不知道R时,R如何对逻辑语句进行推理不可用或缺少数据