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

如何在R中生成数据框所有行的n次全组合?

生成数据框行的n次全组合解决方案

需求说明

现有一个8行3列的二进制数据框test,需要生成其所有行的n次全组合:

  • 当n=2时,需得到64行6列的数据框(或包含64个组合元素的列表),每行由两个原行的列拼接而成。

方案1:生成目标数据框

用expand.grid生成行索引的全组合,再提取对应行拼接,代码如下:

# 创建原数据框
test <- expand.grid(rep(list(0:1), 3))

# 定义组合次数n
n <- 2

# 生成所有行索引的n次全组合
idx_combs <- expand.grid(rep(list(1:nrow(test)), n))

# 拼接对应行,生成最终数据框
result_df <- do.call(rbind, apply(idx_combs, 1, function(idx) {
  do.call(cbind, test[idx, ])
}))

# (可选)给列重命名,区分不同组合组
colnames(result_df) <- paste0("Group", rep(1:n, each = ncol(test)), "_", colnames(test))

执行后result_df即为n=2时64行6列的目标数据框,n取其他值时只需修改n的取值即可。


方案2:生成组合列表

如果需要以列表形式存储每个组合(每个元素是n个原行的集合),可先将原数据框的行拆为列表元素,再用expand.grid生成组合:

# 创建原数据框
test <- expand.grid(rep(list(0:1), 3))

# 定义组合次数n
n <- 2

# 将原数据框的每一行转为列表元素
row_list <- split(test, seq(nrow(test)))

# 生成n次全组合列表
result_list <- expand.grid(rep(list(row_list), n))

此时result_list的每一行对应一个n次行组合,每个单元格是原数据框的一行数据。


问题说明

你之前用expand.grid未成功,是因为直接传入了原数据框而非以行为元素的列表。上述方案通过先将行转为列表元素,再传入expand.grid重复n次,完美匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:15:30