forループを使用せずに条件付きランダムペアを作成したいので、大きなデータセットでコードを使用できます。最初は、私は、固有のIDを持つ行を作成し、ランダムに私の行に二つの異なる「種類」を割り当てる:ベクトル化条件付きランダムマッチング
df<-data.frame(id=1:10,type=NA,partner=NA)
df[sample(df$id,nrow(df)/2),"type"]<-1 ##random 50% type 1
df[which(is.na(df$type)==TRUE),"type"]<-2 ##other 50% type 2
df
id type partner
1 1 2 NA
2 2 1 NA
3 3 1 NA
4 4 1 NA
5 5 2 NA
6 6 1 NA
7 7 1 NA
8 8 2 NA
9 9 2 NA
10 10 2 NA
は今、私は彼らが反対のタイプのランダムなパートナーを受信したいです。だから、私はタイプ1のIDをランダム化し、いくつかのタイプにそれらを一致させる2 IDがそうのように:
df$partner[which(df$type==2)]<-sample(df$id[which(df$type==1)],
nrow(df)/2)
df
id type partner
1 1 2 4
2 2 1 NA
3 3 1 NA
4 4 1 NA
5 5 2 2
6 6 1 NA
7 7 1 NA
8 8 2 6
9 9 2 3
10 10 2 7
をそして、私はこだわっているところです。何らかの理由で、私はRに "タイプ1のIDを取り、これらのIDがどこにあるかをdf$partner
に見て、NAの代わりにdf$partner
"という対応する行IDを返すようにベクトル化した方法を考えることはできません。条件付きランダムペアリングのためのforループのための
一つの例は、ここで見つけることができます:click
私はそれが非常に基本的でなんとかだとかなり確信している、しかし、任意のヘルプは感謝します!