0

上周我发布了以下问题。这个想法是创建一个循环,通过基于变量“id”随机组合观察来确定数据库的内容。

例如:

  • 数据集 1:id 1、2、3、4、5、6、7、8...的组合
  • 数据集 2:id 1、2、3 的组合
  • 数据集 3:id 2、3、4、5 的组合
  • 数据集 4:id 5、6、7、8、9、10 的组合...

我得到了这个问题的完美答案:

for(i in 2:max(o$id)){
  combis=combn(unique(o$id),i)
  for(j in 1:ncol(combis)){
    sub=o[o$id %in% combis[,j],]
    out=sub[1,]    # use your function
    out$label=paste(combis[,j],collapse ='') #provide an id so you know for which combination this result is
    result=rbind(result,out) # paste it to previous output
  }
}

但是,我现在的问题如下:有没有办法指定我只想要至少 5 个 id 的组合?这个过程占用了大量的计算时间,我注意到小数据集(少于 5 个不同的 id)给出了有偏差的结果。

通过这个链接,可以找到数据集的样本和完整的代码来重现该示例。请注意,运行整个代码可能需要一段时间,除非有指定的内容我只对至少 5 个 id 的组合感兴趣。

4

1 回答 1

1

您可以在 5 开始循环:

for(i in 5:max(o$id)){
  combis=combn(unique(o$id),i)
   ...

这样,每个组合中至少有 5 个元素(参见 ?combn)。

于 2016-11-16T19:38:56.050 回答