首页 > 解决方案 > 生成向量中每个项目的 n 个随机对

问题描述

假设我有一个偶数长度的字符向量(例如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 场比赛

标签: r

解决方案


您可以使用igraphsample_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

推荐阅读