首页 > 解决方案 > 从 R 中的向量中的元素创建唯一可能的组合

问题描述

我有一个包含 2 个元素的向量:

v1 <- c('X1','X2')

我想创建这些元素的可能组合。

生成的数据框如下所示:

    structure(list(ID = c(1, 2, 3, 4), c1 = c("X1", "X2", "X1", "X2"
), c2 = c("X1", "X1", "X2", "X2")), class = "data.frame", row.names = c(NA, 
-4L))

这里,ID=2 和 ID=3 的行具有相同的元素(但排列顺序不同)。我想将这两行视为重复的。因此,最终输出将只有 3 行。即3种组合

  1. X1, X1
  2. X1, X2
  3. X2, X2

在我的实际数据集中,向量 V1 中有 16 个这样的元素。

我尝试过使用expand.grid方法来获得可能的组合,但这实际上超出了机器限制。(16 个元素的组合数量会太大)。这可能是由于上述重复。

有人可以在这里帮助获得所有可能的组合而没有任何重复吗?

我实际上正在寻找一种使用数据表功能的解决方案。我相信这真的可以更快

提前致谢。

标签: rdata.tablecombinations

解决方案


这是base R使用您的示例 == 的解决方案data

首先,创建您的组合。使用unique = TRUE减少组合的数量。

library(data.table)

data <- setDT(CJ(df$c1, df$c2, unique = TRUE))

然后,过滤掉重复项:

data[!duplicated(t(apply(data, 1, sort))),]

这给了我们:

   V1 V2
1  X1 X1
2  X2 X1
10 X2 X2

推荐阅读