当前位置:  开发笔记 > 编程语言 > 正文

R中na.rm和na.omit的区别

如何解决《R中na.rm和na.omit的区别》经验,为你挑选了1个好方法。

我刚开始使用R而且我已经执行了这些语句:

library(datasets)
head(airquality)
s <- split(airquality,airquality$Month)
sapply(s, function(x) {colMeans(x[,c("Ozone", "Solar.R", "Wind")], na.rm = TRUE)})
lapply(s, function(x) {colMeans(na.omit(x[,c("Ozone", "Solar.R", "Wind")])) }) 

对于sapply,它返回以下内容:

             5         6          7          8         9
Ozone    23.61538  29.44444  59.115385  59.961538  31.44828
Solar.R 181.29630 190.16667 216.483871 171.857143 167.43333
Wind     11.62258  10.26667   8.941935   8.793548  10.18000

并且lapply,它返回以下内容:

$`5`
    Ozone   Solar.R      Wind 
 24.12500 182.04167  11.50417 

$`6`
    Ozone   Solar.R      Wind 
 29.44444 184.22222  12.17778 

$`7`
     Ozone    Solar.R       Wind 
 59.115385 216.423077   8.523077 

$`8`
    Ozone   Solar.R      Wind 
 60.00000 173.08696   8.86087 

$`9`
    Ozone   Solar.R      Wind 
 31.44828 168.20690  10.07586 

现在,我的问题是,为什么返回的值类似,但不一样?是不是na.rm = TRUEna.omit应该做同样的事情?省略缺失值并仅计算我们所拥有的值的平均值?在这种情况下,我不应该在两个结果集中都有相同的值吗?

非常感谢你的任何输入!



1> nicola..:

它们不应该给出相同的结果.考虑这个例子:

exdf<-data.frame(a=c(1,NA,5),b=c(3,2,2))
#   a b
#1  1 3
#2 NA 2
#3  5 2
colMeans(exdf,na.rm=TRUE)
#       a        b 
#3.000000 2.333333
colMeans(na.omit(exdf))
#  a   b 
#3.0 2.5

为什么是这样?在第一种情况下,b通过计算列的平均值(3+2+2)/3.在第二种情况下,第二行被完全删除(其b也不是-NA,因此在第一种情况下被考虑)na.omit,因此b均值是正确的(3+2)/2.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有