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

R中使用expand_grid生成多个相同向量的唯一无序组合方法咨询

解决方法

你要的是带重复元素的组合,可以直接用以下两种方案实现:

方案1:直接生成目标结果(推荐,效率更高)

用R基础包的combn()函数,开启repeat.allowed参数允许元素重复,直接生成仅包含唯一无序组合的结果:

x <- 1:3
library(tibble)
# 第二个参数指定要取的元素个数(对应你示例里的3列)
result <- t(combn(x, m = 3, repeat.allowed = TRUE))
# 转成tibble和你示例格式对齐
colnames(result) <- c("a", "b", "c")
as_tibble(result)

运行后输出刚好10行,完全符合你要的去重要求,不会出现元素相同仅排序不同的行。

方案2:对已生成的全排列结果去重

如果你已经用expand_grid()生成了全量结果,可以通过对每行元素排序后去重实现:

library(tidyr)
library(dplyr)

x <- 1:3
expand_grid(a = x, b = x, c = x) %>%
  rowwise() %>%
  # 把每行的元素排序后拼接成唯一标识
  mutate(group_id = paste(sort(c(a, b, c)), collapse = "_")) %>%
  ungroup() %>%
  # 按唯一标识去重,保留第一行
  distinct(group_id, .keep_all = TRUE) %>%
  # 去掉辅助列
  select(-group_id)

两种方案的选择建议

  • 数据量较大时优先选方案1,不需要先生成全量27行再过滤,性能更好
  • 如果已经有生成好的全排列数据,或者需要保留原始排列的某一种顺序,选方案2更灵活

内容的提问来源于stack exchange,提问作者Freddie J. Heather

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:12:02