2016-09-26 79 views
0

我試圖用截斷的正態分佈值代替NAs。 首先我用sample如下,函數工作:用r中的截斷正態分佈值代替NA

v.new <- replace(vector,v, sample(8,length(v),replace =FALSE)) 

然而,當我嘗試使用rtnorm它似乎不工作。我收到了任何錯誤消息,並且需要很長時間才能以期望的時間間隔替換NA。任何建議使這項工作?

library(msm) 

# Some data 
data("airquality") 
airquality$Ozone 

# My function 
add.trunc.to.NAvector <- function(vector){ 
v <- NULL 
for(i in 1:length(vector)){ 
if(is.na(vector[i])==TRUE) 
    v <- append(v, i) 
} 
mean.val <- mean(vector) 
sd.val <- sd(vector) 
min.val <- mean.val - 4 * sd.val 
max.val <- mean.val + 4 * sd.val 
v.new <- replace(vector,v, rtnorm(length(v), lower = min.val, upper = max.val)) 


return(v.new) 
} 
+0

難道你不能只是做'替換(vector,vector [is.na(vector)],rtnorm(...))'嗎?什麼不起作用?什麼不起作用?預期的結果是什麼? –

+0

運行沒有結果需要很長時間,我沒有收到任何錯誤消息。 – mina

+1

請在您的問題中添加更多信息。你使用什麼軟件包?什麼是'矢量'(可能是'空氣質量$臭氧',但指定使事情明確)?預期的結果是什麼? –

回答

2

不應該這樣做嗎?

v <- airquality$Ozone 
v.new <- v 
indices <- which(is.na(v)) 
m <- mean(v[-indices]) 
s <- sd(v[-indices]) 
v.new[indices] <- rtnorm(length(indices), lower = m-4*s, upper = m+4*s)