r - 生成向量中每个项目的 n 个随机对

标签 r

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

enter image description here

您可以看到每个玩家都连接到其他三个玩家。将图表转换为包含玩家列的数据框。

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/

相关文章:

json - 使用 toJSON 创建空对象(空括号)

r - 如何在R包RecordLinkage中使用compare.linkage——意外输出

r - 从 R 中的三个向量创建一个命名列表的列表

在 data.table 中运行回归

r - 如何替换 ggmap 对象中的颜色?

r - 将列拆分为多列

r - 尝试从 API 获取数据

r - 如何在列表中循环并访问名称和属性?

r - 有没有办法转换 data.table 以便唯一的行元素成为列名称,然后显示元素计数?

python - 等同于 Python 中 R 的 createDataPartition