从具有重复元素的向量生成所有唯一组合

Jian

之前曾问过这个问题,但仅针对具有非重复元素的向量。我找不到一个简单的解决方案来从具有重复元素的向量中获取所有组合。为了说明,我在下面列出了一个示例。

x <- c('red', 'blue', 'green', 'red', 'green', 'red')

向量x具有3个“红色”重复元素和2个“绿色”重复元素。所有唯一组合的预期结果将是这样。

# unique combinations with one element
'red'
'blue'
'green'
# unique combination with two elements
'red', 'blue' # same as 'blue','red'
'red', 'green' 
'red', 'red'
'blue', 'green'
'green', 'green'
# unique combination with three elements
'red', 'blue', 'green'
'red', 'red', 'blue'
'red', 'red', 'green'
'red', 'red', 'red' # This is valid because there are three 'red's
'green', 'green', 'red'
'green', 'green', 'blue'
# more unique combinations with four, five, and six elements
AxelA

使用combn()lapply()应该做的伎俩。

x <- c('red', 'blue', 'green', 'red', 'green', 'red')

lapply(1:3, function(y) combn(x, y))

# [[1]]
     # [,1]  [,2]   [,3]    [,4]  [,5]    [,6] 
# [1,] "red" "blue" "green" "red" "green" "red"

# [[2]]
     # [,1]   [,2]    [,3]  [,4]    [,5]  [,6]    ...
# [1,] "red"  "red"   "red" "red"   "red" "blue"  ...
# [2,] "blue" "green" "red" "green" "red" "green" ...

# [[3]]
     # [,1]    [,2]   [,3]    [,4]   [,5]    [,6]    ...
# [1,] "red"   "red"  "red"   "red"  "red"   "red"   ...
# [2,] "blue"  "blue" "blue"  "blue" "green" "green" ...
# [3,] "green" "red"  "green" "red"  "red"   "green" ...

所有独特的组合

lapply(cc, function(y)
  y[,!duplicated(apply(y, 2, paste, collapse="."))]
)

[[1]]
[1] "red"   "blue"  "green"

[[2]]
     [,1]   [,2]    [,3]  [,4]    [,5]   [,6]    [,7]   
[1,] "red"  "red"   "red" "blue"  "blue" "green" "green"
[2,] "blue" "green" "red" "green" "red"  "red"   "green"

[[3]]
     [,1]    [,2]   [,3]    [,4]    [,5]    [,6]  [,7]    ...
[1,] "red"   "red"  "red"   "red"   "red"   "red" "blue"  ...
[2,] "blue"  "blue" "green" "green" "red"   "red" "green" ...
[3,] "green" "red"  "red"   "green" "green" "red" "red"   ...

尽管严格来讲,它们并不是唯一的组合,因为其中一些是彼此的排列。

正确独特的组合

lapply(cc, function(y)
  y[,!duplicated(apply(y, 2, function(z) paste(sort(z), collapse=".")))]
)

# [[1]]
# [1] "red"   "blue"  "green"

# [[2]]
     # [,1]   [,2]    [,3]  [,4]    [,5]   
# [1,] "red"  "red"   "red" "blue"  "green"
# [2,] "blue" "green" "red" "green" "green"

# [[3]]
     # [,1]    [,2]   [,3]    [,4]    [,5]  [,6]   
# [1,] "red"   "red"  "red"   "red"   "red" "blue" 
# [2,] "blue"  "blue" "green" "green" "red" "green"
# [3,] "green" "red"  "red"   "green" "red" "green"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

组合 3 个表以生成所有列的唯一组合

查找具有两列的唯一组合的所有行

生成两个Excel列的所有可能的唯一组合

生成项目的所有唯一组合

生成数组的所有唯一组合的最佳方法?

如何找到多维数组中每个元素的所有唯一组合

从数组获取给定数量的元素的所有唯一组合

一组值的所有唯一组合

生成一组所有组合

Python:将所有具有约束的唯一组合输出到Pandas DataFrame

您如何约束具有大量非唯一组合的组合键?

为有序非重复元素的所有组合分配一个唯一整数

查询表中具有一个值但没有另一个值的所有唯一组合

如何从SQL中的1列返回所有唯一组合?

从排列列表中获取所有唯一组合

如何获得特定列的值的所有唯一组合

查找简单路径的所有唯一组合

删除除两列的最新唯一组合以外的所有内容

c#如何获取对象列表及其频率的所有唯一组合

找到 1 到 k 之间 n 个数字的所有唯一组合

Python-从长度不等的列表中获取替换的所有唯一组合

JavaScript,从多个数组中获取所有唯一组合

查找固定大小的所有唯一组合以达到给定的平均范围

每次使用相同的选项获得x个斑点的所有唯一组合

5 * 12网格中所有唯一组合的算法

递归函数来获得两个或多个的所有唯一组合

列表中具有“距离限制”的唯一组合

熊猫:计算具有NaN值的四列中的唯一组合

获取具有ID /值的唯一组合的对象列表