我在R中运行以下插补任务作为for循环:
myData <- essuk[c(2,3,4,5,6,12)]
myDataImp <- matrix(0,dim(myData)[1],dim(myData)[2])
lower <- c(0)
upper <- c(Inf)
for (k in c(1:5))
{
gmm.fit1 <- gmm.tmvnorm(matrix(myData[,k],length(myData[,k]),1), lower=lower, upper=upper)
useMu <- matrix(gmm.fit1$coefficients[1],1,1)
useSigma <- matrix(gmm.fit1$coefficients[2],1,1)
replaceThese <- myData[,k]<=0
myDataImp[,k] <- myData[,k]
myDataImp[replaceThese,k] <- rtmvnorm(n=sum(replaceThese), c(useMu), c(useSigma), c(-Inf), c(0))
}
步骤非常简单
但是,我想分别针对多个组进行此操作,而不是针对完整样本。数据集中的第12列包含有关组成员资格的信息(整数范围为1-72)。
我尝试了多种选项,包括使用data_list <- split(myData, myData$V12)
拆分数据框并使用lapply()
功能。但是,由于模型估计的格式如何,这不起作用:
Error in as.data.frame.default(data) :
cannot coerce class ""gmm"" to a data.frame
我也考虑过做嵌套for循环的可能性,虽然我不确定如何实现。任何建议都非常感谢。
答案 0 :(得分:1)
如何使用subset()?
myData$V12 = as.factor(myData$V12)
listofresults= c()
for (i in levels(myData$V12)){
data = subset (myData, myData$V12 == i)
#your analysis here: result saved in myDataImp
listofresults = c(listofresults, myDataImp)
}
不是最优雅,但应该有效。