2016-09-26 10 views
0

Я пытаюсь заменить NAs на укороченные нормальные значения распределения. Сначала я использовал sample следующим образом и функция работала:замените NA на укороченные нормальные значения распределения в r

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

Однако, когда я пытаюсь использовать rtnorm, кажется, не работает. Я получил сообщения об ошибках, и для замены НС требуются возрастные периоды на нужный интервал. Любое предложение сделать эту работу?

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

Не могли бы вы просто заменить (вектор, вектор [is.na (вектор)], rtnorm (...)) '? Что не работает? Что не работает? Каков ожидаемый результат? –

+0

Это занимает много времени, чтобы работать без результата, и я не получаю сообщение об ошибке. – mina

+1

Пожалуйста, добавьте дополнительную информацию на свой вопрос. Какие пакеты вы используете? Что такое 'vector' (вероятно,' airquality $ Ozone', но укажите, чтобы сделать вещи однозначными)? Что такое ожидаемый результат? –

ответ

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)