如果至少组合了 5 个 ID,则根据变量 ID 组合观察
Combine observations based on the variable ID if at least 5 IDs are combined
上周我发布了以下 。这个想法是做一个循环,通过随机组合基于变量 "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)给出有偏差的结果。
通过这个link,可以找到数据集的样本和完整的代码来重现这个例子。请注意,运行 整个代码可能需要一段时间,除非有明确说明我只对至少 5 个 ID 的组合感兴趣。
您可以在 5:
开始循环
for(i in 5:max(o$id)){
combis=combn(unique(o$id),i)
...
这样,每个组合中至少有 5 个元素(参见 ?combn)。
上周我发布了以下
例如:
- 数据集 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)给出有偏差的结果。
通过这个link,可以找到数据集的样本和完整的代码来重现这个例子。请注意,运行 整个代码可能需要一段时间,除非有明确说明我只对至少 5 个 ID 的组合感兴趣。
您可以在 5:
开始循环for(i in 5:max(o$id)){
combis=combn(unique(o$id),i)
...
这样,每个组合中至少有 5 个元素(参见 ?combn)。