在R中,我如何随机选择两个三个名字500次,平衡选择?

问题描述 投票:1回答:1

我知道我可以使用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个,这样可以减少“连续”的情况。

r random database-design
1个回答
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)

© www.soinside.com 2019 - 2024. All rights reserved.