You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R在数据框中生成无重复的随机名字配对

实现名字的无重复随机配对(R语言)

需求说明

需要从数据框的名字列生成随机配对,满足以下要求:

  • 每个名字仅参与一次配对
  • 配对结果随机排序
  • 禁止名字与自身配对

原代码使用combn生成了所有可能的两两组合,无法满足「仅配对一次」的要求,以下是解决方案:

解决代码

# 创建数据框(保留原数据)
df = data.frame(
  "Name" = c("Amiya", "Raj", "Asish", "John", "ruban", "mary", "barath", "leema", "joshi", "indhu", "praveen", "joshua",
             "alex", "martin", "stella", "veronica", "henry", "rajesh", "yusuf", "jenita", "johana", "jerald", "jegan", "lincy",
             "jona", "rani", "julie", "ross", "chandler", "monica", "penny", "sheldon"),
  
  "Sex" = c("Female", "Male", "Male", "male", "male", "Female", "male", "Female", "Female", "Female", "male",
            "male", "male", "male", "Female", "Female", "male", "male", "male", "Female", "Female", "male",
            "male", "Female", "Female", "Female", "Female", "male", "male", "Female", "Female", "male"),
  
  "Number" = c(8937998889, 2598279874, 4589987483, 2876876877, 2876876876, 2487698798, 2879879877, 2887987897, 2878798733,
               4309808098, 8748098990, 9883798798, 8734787987, 8973498787, 8734887877, 9798374877, 8786487687, 7275687263,
               4379879847, 8943787876, 3874879874, 8978973987, 8978347878, 8839478768, 9378887774, 8467676764, 7246276874,
               7478798743, 6576787877, 7328776876, 6648678833, 6378787878)
)

# 提取唯一名字并随机打乱顺序
names_list <- unique(df$Name)
set.seed(123) # 可选:设置随机种子,确保结果可复现
shuffled_names <- sample(names_list)

# 生成无重复配对
pairings <- matrix(shuffled_names, ncol = 2, byrow = TRUE)
colnames(pairings) <- c("成员A", "成员B")

# 输出结果
print(pairings)

代码说明

  • unique(df$Name):确保名字无重复(原数据已唯一,此步骤可兼容有重复名字的场景)
  • sample(names_list):随机打乱名字顺序,保证配对的随机性,同时避免自身配对(名字唯一时不可能出现自身配对)
  • matrix(..., ncol=2, byrow=TRUE):将打乱后的名字按行分成两列,每个名字仅出现一次,完美满足「仅配对一次」的要求

处理奇数人数的情况

如果名字总数是奇数,会有一个名字无法配对,可添加以下逻辑处理:

if(length(shuffled_names) %% 2 != 0){
  unpaired_name <- tail(shuffled_names, 1)
  shuffled_names <- head(shuffled_names, -1)
  pairings <- matrix(shuffled_names, ncol = 2, byrow = TRUE)
  cat("未配对的名字:", unpaired_name, "\n")
}

内容的提问来源于stack exchange,提问作者Lincy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:30:45