非常簡單的問題,我敢肯定它已被回答,我只是錯誤地措辭,但我想計算一個包括NA值的數字向量的均值,下面是一個示例:如何統計NAs的平均值計算
dummy<-c(1,2,NA, 3)
與此我可以使用與na.rm = T意味着和接收的2的平均值,但我希望收到的是6/4的平均值,包括NA值作爲佔位符,其會返回1.5。
非常簡單的問題,我敢肯定它已被回答,我只是錯誤地措辭,但我想計算一個包括NA值的數字向量的均值,下面是一個示例:如何統計NAs的平均值計算
dummy<-c(1,2,NA, 3)
與此我可以使用與na.rm = T意味着和接收的2的平均值,但我希望收到的是6/4的平均值,包括NA值作爲佔位符,其會返回1.5。
只需將NA值與0臨時交換即可。
mean(ifelse(is.na(dummy),0,dummy))
使用sum
和length
> sum(dummy, na.rm=TRUE)/length(dummy)
[1] 1.5
由於有很多方法可以做到這一點嘗試,在這裏不用另一種解決方案:
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
'sum(dummy,na.rm = TRUE)/ length(dummy)'?? –
也可以工作,只是使所有的'NA's 0 –
@BenBolker什麼時候會給出不同的答案? –