用 r 中截断的正态分布值替换 NA
replace NA by truncated normal distribution values in r
我正在尝试用截断的正态分布值替换 NA。
首先,我按如下方式使用 sample
并且该函数有效:
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)
}
这应该行不通吗?
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)
我正在尝试用截断的正态分布值替换 NA。
首先,我按如下方式使用 sample
并且该函数有效:
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)
}
这应该行不通吗?
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)