非常简单的问题,我确信它已被回答,我只是错误地说它,但我想计算包含NA值的数字向量的平均值,这是一个例子:
dummy<-c(1,2,NA, 3)
有了这个我可以使用na.rm = T的平均值并且得到2的平均值,但我想要接收的是6/4的平均值,包括作为占位符的NA值将返回1.5。< / p>
答案 0 :(得分:3)
如何暂时将NA值与0交换。
mean(ifelse(is.na(dummy),0,dummy))
答案 1 :(得分:3)
尝试使用sum
和length
> 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