我知道我可以使用randomizr包中的complete_ra随机分配给三个“武器”中的一个(在这种情况下,“武器”只是人的名字)
library(randomizr)
set.seed(100)
names <- complete_ra(N = 500, num_arms = 3)
#each "arm" is chosen ~167 times
#Now put the names in
library(plyr)
df <- transform(df,
names=revalue(names,c("T1"="Luis", "T2"="Conor","T3"="Dafydd")))
但我需要的是将500个样本实际分配给三个名称中随机选择的两个。所以我需要我的数据集:
ID# Name1 Name2
1 Conor Luis
2 Conor Dafydd
3 Luis Dafydd
...
500 Conor Luis
并且最后我需要将3中的每一个仍然选择相等的数量。
一个解决方法是,因为有3个名字,这意味着还有3个组合,所以我可以简单地用“Conor和Luis”取代Conor,Luis用“Luis和Dafydd”替换,Dafydd用“Conor和Dafydd”取代......但是我我确定有一种更有说服力的方式可以允许其他组合(比如选择4个名字中的2个)。此外,我不喜欢这种解决方法,因为目前每个名称可以连续显示8次,这意味着我们将连续8次精确配对。我认为一个更有说服力的方法是随机选择3个名称中的2个,这样可以减少“连续”的情况。
从列表中选择n个元素的规范方法(这里没有替换)将是sample
。这里有一个简单的方法来创建500个这样的样本并将结果转换为data.frame
:
set.seed(100)
names <- c("Luis", "Conor", "Dafydd")
samples <- lapply(1:500, function(x) sample(names, 2))
head(as.data.frame(matrix(unlist(samples), ncol = 2, byrow = TRUE)))
#> V1 V2
#> 1 Luis Dafydd
#> 2 Conor Luis
#> 3 Conor Luis
#> 4 Dafydd Luis
#> 5 Conor Luis
#> 6 Conor Dafydd
由reprex package创建于2019-03-15(v0.2.1)