【发布时间】:2015-12-02 16:05:51
【问题描述】:
我有一组数据,其中包含一个因变量和两个因素。我想在我的两个因素组合的每个子集中随机抽取因变量(有替换)(并且检索到的随机样本的数量应该等于两个因素的每个组合中最初存在的数量)。我已经能够使用“by”功能做到这一点。问题是输出是一个列表,我想要一些更容易访问但没有任何运气转换为数据框的东西。我的最终目标是运行上述模拟 1000 次,并为每次模拟计算针对每种因素组合检索到的随机样本的平均值。
这会产生数据集:
value<-runif(100,5,25)
cat1<-factor(rep(1:10,10))
a<-rep("A",50)
b<-rep("B",50)
cat2<-append(a,b)
data<-as.data.frame(cbind(value,cat1,cat2))
这会创建一个从因子水平中抽取的随机值的模拟,并且 将该信息存储在列表中:
list<-by(data[,"value"],data[,c("cat1","cat2")],function(x) sample(x,length(x),T))
我想要做的是最终得到一个数据框,其中包含“模拟”、“平均值”、“cat1”和“cat2”列 - 这样我就可以为 cat1 的每个组合提供 1000 条模拟线和猫 2。
关于如何使“by”输出更易于访问以便我可以在输出上运行 for 循环或其他建议的任何建议都会很棒。
谢谢!
【问题讨论】:
-
试试
do.call(rbind, list)应该可以解决问题。 -
警告信息:In (function (..., deparse.level = 1) : 结果的列数不是向量长度的倍数 (arg 12)
-
谢谢,SabDeM。您的解决方案非常适合上面的模拟数据集。尽管在我的实际数据上运行那段代码,但我仍然遇到的问题是,每个因子组合的模拟值的数量对于所有因子组合都不相等。所以每行的列数不相等,我得到了上面的错误。
标签: r