[英]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.