我有一个数据集,由从研究和实验中获得的值组成。实验嵌套在研究中。我想对数据集进行二次抽样,以便每个研究只代表 1 个实验。我想重复这个过程 10,000 次,每次随机抽取 1 个实验,然后计算一些值的汇总统计。这是一个示例数据集:
df=data.frame(study=c(1,1,2,2,2,3,4,4),expt=c(1,2,1,2,3,1,1,2),value=runif(8))
我编写了以下函数来执行上述操作,但它需要永远。有人对简化此代码有任何建议吗?谢谢!
subsample=function(x,A) {
subsample.list=sapply(1:A,function(m) {
idx=ddply(x,c("study"),function(i) sample(1:nrow(i),1)) #Sample one experiment from each study
x[paste(x$study,x$expt,sep="-") %in% paste(idx$study,idx$V1,sep="-"),"value"] } ) #Match the study-experiment combinations and retrieve values
means.list=ldply(subsample.list,mean) #Calculate the mean of 'values' for each iteration
c(quantile(means.list$V1,0.025),mean(means.list$V1),upper=quantile(means.list$V1,0.975)) } #Calculate overall means and 95% CIs