如何计算均值计算中的NA

时间:2014-05-19 20:47:03

标签: r mean na

非常简单的问题,我确信它已被回答,我只是错误地说它,但我想计算包含NA值的数字向量的平均值,这是一个例子:

dummy<-c(1,2,NA, 3)

有了这个我可以使用na.rm = T的平均值并且得到2的平均值,但我想要接收的是6/4的平均值,包括作为占位符的NA值将返回1.5。< / p>

3 个答案:

答案 0 :(得分:3)

如何暂时将NA值与0交换。

mean(ifelse(is.na(dummy),0,dummy))

答案 1 :(得分:3)

尝试使用sumlength

> sum(dummy, na.rm=TRUE)/length(dummy)
[1] 1.5

答案 2 :(得分:3)

由于有很多方法可以做到这一点,这里有另一个解决方案:

mean(replace(dummy, is.na(dummy), 0)) ## 1.5
[1] 1.5

出于好奇,最有效的解决方案似乎是Jilber的总和/长度:

bigdummy <- rnorm(1000)
bigdummy[sample(1:length(bigdummy), 100)] <- NA

library(microbenchmark)
mean_length <- function(x) sum(x, na.rm=TRUE)/length(x)
mean_replace <- function(x) mean(replace(x, is.na(x), 0)) 
mean_ifelse <- function(x) mean(ifelse(is.na(x),0,x))


microbenchmark(mean_length(bigdummy), 
               mean_replace(bigdummy), 
               mean_ifelse(bigdummy), 
               times=1000L)


  Unit: microseconds
                   expr     min      lq  median      uq      max neval
  mean_length(bigdummy)   4.033   4.400   5.499   5.866  109.976  1000
 mean_replace(bigdummy)  25.661  27.128  28.594  29.327  198.690  1000
  mean_ifelse(bigdummy) 142.602 144.802 145.902 152.500 3405.209  1000