我有一个数据帧(原始),可以有一个带有NA的变量(iv1)。我想用(iv1)中现有分数的分布替换不同随机值的NA,而不是单个值。样本量(n)可以是任何值 - 100到1000。
我将分发保存到新数据框(dbmi),因为我想保持raw和dbmi分开,并计算dbmi中iv1的现有值的平均值和SD。以下代码有效,但只用一个值替换所有NA。我想我需要设置一个for循环?某种循环找到NA的下一次出现并运行新的'rnorm'值并将其粘贴到下一个并再次执行等等但我无法弄清楚如何做到这一点。有什么帮助吗?
dbmi<-raw
attach(dbmi)
rawmean<-mean(dbmi$iv1,na.rm=TRUE)
rawsd<-sd(dbmi$iv1,na.rm=TRUE)
for (i in 1:n){
dbmi$iv1[is.na(dbmi$iv1)]<-rnorm(1,rawmean,rawsd)
}
答案 0 :(得分:0)
我实际上解决了自己的问题。我将具有NA的变量locations [i]设置为一个名为&#39; pull&#39;的变量,然后我刚刚创建了一个名为&#39; new&#39;的变量的新流。我用这段代码代替。
dbmi<-raw
attach(dbmi)
rawmean<-mean(dbmi$iv1,na.rm=TRUE)
rawsd<-sd(dbmi$iv1,na.rm=TRUE)
new<-rnorm(num,rawmean,rawsd)
for (i in 1:n){
dbmi$iv1[pull]<-new
}