r - 生成向量中每个项目的 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 场比赛
解决方案
您可以使用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
推荐阅读
- apache-kafka - 如何在 kafka 中处理 .png 或 .jpg 文件?
- python - 如何使用 quantization-aware-training 完成神经网络的 4-bit 量化
- xml - 如何根据元素的属性值来限制元素的值
- java - Hazelcast中单线程分区的工作,用于同一键上的并发更新请求
- google-cloud-pubsub - 如何使用 MQTT 和 C 代码订阅遥测事件?
- ios - 自 Lottie 3.0 更新以来 setAnimation 发生了变化?
- php - yii 命令在 yii2 应用程序中不起作用
- asp.net - 身份验证可防止使用 Code Behind 中的 WebClient() 从 Web 表单发布到 Classic ASP
- metadata - 在 Katalon Studio 中,我如何检查 JSON 元数据
- python - 配置 Nginx 以使用 uwsgi 自动运行烧瓶