В R, как я могу случайно выбрать два из трех имен 500 раз со сбалансированным выбором? - PullRequest
1 голос
/ 15 марта 2019

Я знаю, что могу использовать complete_ra из пакета randomizr для случайного и одинакового распределения одной из трех «рук» (в данном случае «руки» - это просто имена людей)

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 комбинации, поэтому я мог бы просто заменить Конор на «Конор и Луис», Луис на «Луис и Дафидд» и Дафидд на «Конор и Дафидд»... но я уверен, что есть более красноречивый способ, который позволил бы использовать другие комбинации (например, выбрать 2 из 4 имен).Также мне не нравится обходной путь, потому что в настоящее время каждое имя может появляться, например, 8 раз подряд, что означает, что у нас будет точная пара 8 раз подряд.Я думаю, что более красноречивый метод случайного выбора 2 из 3 имен привел бы к меньшему количеству дел подряд.

1 Ответ

2 голосов
/ 15 марта 2019

Канонический способ выбрать 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

Создано в 2019-03-15 с помощью пакета Представить (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...