na.omit和is.na有什么区别?

时间:2014-02-01 02:33:30

标签: r

na.omitis.na之间的区别是什么?

minO2 <- equal.count(na.omit(algae$mnO2),number=4,overlap=1/5)
stripplot(season ~ a3|minO2,data=algae[!is.na(algae$mnO2),])

我在第二个代码行中使用了na.omit而不是is.na?我的情节完全不同。

另一件事是,如果有人告诉我!(逻辑否定运算符)背后的逻辑,我将不胜感激?

2 个答案:

答案 0 :(得分:2)

在对equal.count的调用中,对象na.omit(algae$mnO2)将是algae$mn02中不是NA的值。

现在,说你有这个剧情的代码:

stripplot(season ~ a3|minO2,data=na.omit(algae))

如果在algae不是NA的行中有algae$mn02的{​​{1}}列包含NA,那么这些行就不会排成一行,而且情节也不会如预期的那样。

这是一个会发生这种情况的例子:

algae<- data.frame(a3=c(NA,1,2), mn02=c(1,2,NA))
algae
##   a3 mn02
## 1 NA    1
## 2  1    2
## 3  2   NA

请注意以下两个表达式之间的区别:

na.omit(algae)
##   a3 mn02
## 2  1    2

algae[!is.na(algae$mn02),]
##   a3 mn02
## 1 NA    1
## 2  1    2

后者将与equal.count(na.omit(algae$mn02))产生的瓦片对齐,但前者不会。这里的第一个表达式少了一行,因为mn02不是NA的情况不完整。

注意:

equal.count(na.omit(algae$mn02))
## 
## Data:
## [1] 1 2

...

这里有两个要素。此表达式不会检查NA以外的列中的mn02

答案 1 :(得分:1)

设置数据

nas <- c(NA, 1, 2, 3, NA)

is.na返回逻辑向量

is.na(nas)
[1]  TRUE FALSE FALSE FALSE  TRUE

!操作员将采取真理并使他们变成虚假并将虚假变为真实。

!(is.na(nas))
[1] FALSE  TRUE  TRUE  TRUE FALSE

返回is.na(nas)

的否定

na.omit从矢量

中删除NA
na.omit(tf)
[1] 1 2 3

如果没有更多信息,我无法分辨你的情节发生了什么。