1

我刚刚遇到一个简单的问题,但我不明白发生了什么。我正在使用 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
4

1 回答 1

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))
于 2015-02-03T01:04:41.273 回答