【发布时间】:2017-10-17 12:42:14
【问题描述】:
我想随机分配成员。然而,这个问题似乎比最初预期的要棘手。 combn和sampledon'r 因为重复而工作。如果一个成员被分配给另一个成员,则不能以第三个身份结束。
我有一个非常粗鲁的解决方法来说明我想要什么:
groupmembers <- 10
set <- 1:groupmembers
df <- data.frame(g1=set, g2=NA)
for(i in 1:(nrow(df)/2)){
set.seed(137)
draw <- sample(set, 1)
while(draw==i) draw <- sample(set, 1)
df[i,2] <- draw
df[which(df[,1]==draw),2] <- df$g1[i]
set <- set[-which(set %in% as.numeric(df[i,]))]
}
g1 g2
1 1 7
2 2 8
3 3 6
4 4 9
5 5 10
6 6 3
7 7 1
8 8 2
9 9 4
10 10 5
有了这个set.seed,我得到了我想要的。但是,如果我更改set.seed,我的df 中可能会或可能不会以NA 结束。有没有更优雅的解决方案?
输出可以是成对的list 或data.frame 等。
谢谢
编辑
我可能不仅会得到NA,还会得到非镜像对,我想防止这种情况发生。
【问题讨论】:
-
你能展示一下预期的结果吗?
-
匹配是否有意“镜像”(例如 1/7 和 7/1)?
-
我刚做了。预期的结果应该如上所示(它使用那个循环和那个
set.seed)。每对数字出现两次:{3,6}和 ´{6,3}` -
乔普,他们应该被镜像。把它想象成人。第 1 个人与第 7 个人交谈(以及 7 对 1)。
标签: r combinations