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の組み合わせのみを組み合わせたいと指定する方法はありますか? このプロセスには多くの計算時間がかかり、小さなデータセット (異なる ID が 5 つ未満) では偏った結果が得られることに気付きました。

このリンクから、データセットのサンプルと完全なコードを見つけて、例を再現できます。少なくとも 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 に答える