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

如何在R中生成14个数字划分为两个独立分组的全部组合列表

R实现1-14拆分为两组全组合

14个数字每个都有归入Group X、归入Group Y两种选择,总计2^14=16384种组合,和你预期的总数一致,以下是可直接运行的实现方案:

位运算实现(效率最优)

通过整数二进制位标记数字归属,遍历0到16383的所有整数即可覆盖全部组合,运行速度最快:

nums <- 1:14
total_combo <- 2^length(nums)
# 预分配内存存储结果
res <- vector("list", total_combo)

for (i in seq_len(total_combo)) {
  # 二进制位为1的数字归入Group X
  x_flag <- as.logical(intToBits(i-1)[1:length(nums)])
  group_x <- nums[x_flag]
  # 剩余数字归入Group Y
  group_y <- nums[!x_flag]
  res[[i]] <- list(
    x = group_x,
    y = group_y,
    x_str = paste(group_x, collapse = ", "),
    y_str = paste(group_y, collapse = ", ")
  )
}

expand.grid实现(可读性更强)

直接生成所有归属逻辑的真值表,代码逻辑更直观:

nums <- 1:14
# 生成14列、每列取值为TRUE/FALSE的全组合真值表
belong_tbl <- expand.grid(rep(list(c(TRUE, FALSE)), length(nums)))

res <- apply(belong_tbl, 1, function(flag){
  group_x <- nums[flag]
  group_y <- nums[!flag]
  list(
    x = group_x,
    y = group_y,
    x_str = paste(group_x, collapse = ", "),
    y_str = paste(group_y, collapse = ", ")
  )
})

输出为示例格式的表格

如果需要得到和你给出的示例结构一致的数据框,运行以下代码即可:

# 提取逗号分隔的字符串格式分组,生成数据框
result_df <- data.frame(
  `Group X` = sapply(res, `[[`, "x_str"),
  `Group Y` = sapply(res, `[[`, "y_str"),
  check.names = FALSE
)

# 按Group X的元素个数、元素值排序,和示例展示的顺序完全对齐
result_df <- result_df[order(nchar(result_df$`Group X`), result_df$`Group X`), ]

排序后查看前3行,和你给出的示例完全匹配:

Group XGroup Y
12, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
1, 23, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
1, 2, 34, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14

补充说明:如果需要排除「Group X为空」「Group Y为空」的两种边界情况,增加一行过滤代码即可:result_df <- result_df[nchar(result_df$Group X) > 0 & nchar(result_df$Group Y) > 0, ],过滤后剩余16382种组合。如果需要固定分组大小(比如两组各7个数字),直接用combn函数按固定元素个数生成组合即可,不需要遍历全量2^14种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:01:25