假设我有一个偶数长度的字符向量(例如players = c("Chris", "Fred", "Brian", "James", "Bill", "Hicham")
) ,我想为每个玩家随机生成 n = 唯一对。
现在我弄清楚了如何生成所有可能的对:
matchup <- data.frame(t(combn(players, 2)))
我正在寻找一种解决方案,以便在该向量中为每个玩家挑选 n 个随机对。
预期输出是向量中的每个玩家都有 n 场比赛,因此如果 n = 3,则可能类似于:
X1 X2
1 James Bill
2 Chris Hicham
3 Fred Bill
4 Chris Bill
5 James Brian
6 Brian Hicham
7 Chris Brian
8 James Fred
9 Fred Hicham
詹姆斯:3场比赛
克里斯:3场比赛
希查姆:3场比赛
弗雷德:3场比赛
布莱恩:3场比赛
比尔:3场比赛
最佳答案
您可以使用 igraph 包中的 sample_degseq
函数生成具有给定度数(此处为 3)并且没有倍数的随机图。
players <- c("Chris", "Fred", "Brian", "James", "Bill", "Hicham")
p <- length(players)
n <- 3 # the degree
set.seed(123) # Omit this to generate a purely random network graph
library(igraph)
g = sample_degseq(rep(n, p), method = "simple.no.multiple")
V(g)$name <- players # add the players names to the vertices
g
#[1] Chris--Brian Chris--James Chris--Bill Fred --Brian Fred --Bill Fred --Hicham
#[7] Brian--Hicham James--Bill James--Hicham
您还可以使用邻接矩阵来可视化这一点:
as_adj(g)
#6 x 6 sparse Matrix of class "dgCMatrix"
# Chris Fred Brian James Bill Hicham
#Chris . . 1 1 1 .
#Fred . . 1 . 1 1
#Brian 1 1 . . . 1
#James 1 . . . 1 1
#Bill 1 1 . 1 . .
#Hicham . 1 1 1 . .
或者有情节。
plot(g)
您可以看到每个玩家都连接到其他三个玩家。将图表转换为包含玩家列的数据框。
as_data_frame(g)
# from to
#1 Chris Brian
#2 Chris James
#3 Chris Bill
#4 Fred Brian
#5 Fred Bill
#6 Fred Hicham
#7 Brian Hicham
#8 James Bill
#9 James Hicham
关于r - 生成向量中每个项目的 n 个随机对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62734917/