Предположим, у меня есть вектор id <- c(1:10)
, и я хочу создать случайные пары, исходящие из этого вектора, с ограничением, что каждая пара должна быть уникальной, и каждое число/идентификатор не может быть сопряжено с самим собой. Нравиться:
1-2,2-4,3-7 и так далее.
Я нашел решение этой проблемы в этом ответе stackoverflow:
pairOff <- function(x) { x <- sample(x) # to get first column into random order M <- matrix(c(x, x[(seq_along(x) + sample(seq_along(x)[- (length(x) - 1)], 1)) %% length(x) + 1]), ncol=2) return(M) }
возврат, например:
[,1] [,2]
[1,] 1 10
[2,] 10 4
[3,] 4 9
[4,] 9 5
[5,] 5 2
[6,] 2 8
[7,] 8 6
[8,] 6 3
[9,] 3 7
[10,] 7 1
Теперь предположим, что каждый идентификатор принадлежит группе (1 или 2, но может быть и › 2):
group_ID <- c(1,1,1,1,1,2,2,2,2,2)
и существует вероятность того, что каждый идентификатор будет связан либо с другим идентификатором из той же группы, либо из другой группы:
p_owngroup <- 0.7
p_othergroup <- 1 - p_owngroup_ID
В функции pairOff вероятность всегда равна p = 0,5.
Мой вопрос: как я могу создать функцию для создания уникальных пар (не позволяя создавать пары с самим собой, и каждый идентификатор имеет только одного уникального партнера), где базовая вероятность для каждого идентификатора быть в паре с идентификатором из той же группы равна p_owngroup и быть в паре с идентификатором из другой группы p_othergroup?