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

如何在R中生成元素仅用一次的两组三人无重复组合

无重复分组的R实现方案

你用combn生成的20种3个个体的组合里,每一组都对应一个唯一的补集(剩下的3个个体),这两者就构成一组无重复的完整分组。因为每对分组会被combn生成两次(比如先出abc再出def),所以只需要取前一半的组合,再匹配它们的补集,就能得到你要的10种结果。

优化后的代码实现

首先简化你生成组合的代码,combn可以直接处理字符向量,不需要手动循环替换:

individuals <- c("a","b","c","d","e","f")
# 直接生成所有3个个体的组合,结果是列数为20的矩阵
all_combs <- combn(individuals, 3)

# 计算有效分组对的数量:总组合数的一半
pair_count <- ncol(all_combs) / 2

# 生成所有无重复分组对
unique_groups <- lapply(1:pair_count, function(i) {
  group1 <- all_combs[, i]
  # 补集就是不在group1里的个体
  group2 <- setdiff(individuals, group1)
  list(group1 = group1, group2 = group2)
})

# 查看第一个分组对
unique_groups[[1]]
# 或者把结果整理成数据框方便查看
group_df <- do.call(rbind, lapply(unique_groups, function(g) {
  data.frame(
    group1 = paste(g$group1, collapse = ""),
    group2 = paste(g$group2, collapse = "")
  )
}))

print(group_df)

代码说明

  • combn(individuals, 3)直接生成字符组合矩阵,避免了原代码中数字转字母的循环操作,更高效简洁。
  • setdiff(individuals, group1)用来获取当前组合的补集,也就是另一组的3个个体。
  • 通过lapply遍历前10个组合,每个组合和它的补集构成一个无重复分组对,最终得到10种符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:01:18