na.rm和is.na给出了不同的答案

时间:2015-02-03 01:01:15

标签: r mean na na.rm

我只是遇到一个简单的问题,但我不明白发生了什么。我使用R删除NA值并计算简单的汇总统计信息,但is.na和na.rm给了我不同的答案。

如果我有一个载体

> test<-c(NA, NA,NA, 1,2,3,4)

我用na.rm = TRUE计算平均值,得到正确的c(1,2,3,4)平均值。

> mean(test, na.rm=TRUE)
[1] 2.5

如果我重复计算,这次用!is.na()删除NA值,我得到了错误的答案。

> mean(!is.na(test))
[1] 0.5714286

!is.na(test)给了我正确的值,但R如何估算这里的平均值?

> !is.na(test)
[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

1 个答案:

答案 0 :(得分:5)

!is.na(test)返回逻辑向量。所以,你实际要求的是:

mean(as.numeric(!is.na(test)))

确实产生:

## [1] 0.5714286

您需要做的是:

mean(test[!is.na(test)])
## [1] 2.5

或者,正如Richard Scriven所说:

mean(na.omit(test))

mean(na.exclude(test))