繁体   English   中英

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

[英]na.rm and is.na give different answers

我只是遇到一个简单的问题,但我不知道发生了什么。 我正在使用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

!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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM