我刚刚遇到一个简单的问题,但我不明白发生了什么.我使用R来删除NA值并计算简单的汇总统计信息,但is.na和na.rm给了我不同的答案.
如果我有一个矢量
> test<-c(NA, NA,NA, 1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
我用na.rm = TRUE计算平均值,得到正确的c(1,2,3,4)平均值.
> mean(test, na.rm=TRUE)
[1] 2.5
Run Code Online (Sandbox Code Playgroud)
如果我重复计算,这次用!is.na()删除NA值,我得到了错误的答案.
> mean(!is.na(test))
[1] 0.5714286
Run Code Online (Sandbox Code Playgroud)
!is.na(测试)给了我正确的值,但R如何估算这里的平均值?
> !is.na(test)
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
!is.na(test)返回逻辑向量.那么,你实际要求的是:
mean(as.numeric(!is.na(test)))
Run Code Online (Sandbox Code Playgroud)
它确实产生:
## [1] 0.5714286
Run Code Online (Sandbox Code Playgroud)
你需要做的是:
mean(test[!is.na(test)])
## [1] 2.5
Run Code Online (Sandbox Code Playgroud)
或者,正如Richard Scriven补充道:
mean(na.omit(test))
Run Code Online (Sandbox Code Playgroud)
要么
mean(na.exclude(test))
Run Code Online (Sandbox Code Playgroud)