首页 > 解决方案 > R - 生成具有重复项的唯一列表序列

问题描述

我希望在列表中生成唯一的元素序列,其中某些元素在 R 中不是唯一的

sequence <- c(1,0,1,0)

例如:

result<-function(sequence)  
result:
  seq1 seq2 seq3 seq4 seq5 seq6
1    1    1    0    0    0    1
2    0    1    0    1    1    0
3    1    0    1    0    1    0
4    0    0    1    1    0    1

请注意,所有序列都包含原始序列中的每个元素,因此序列的总和始终为 2

gtools 返回“不同元素太少”

result <- gtools::permutations(4, 4, coseq)

我没有找到任何直接解决此问题的 SO 帖子,而是允许元素重复:创建 可实现的序列组合expand.grid和不同长度的序列。

编辑: 上面是一个最小的例子,理想情况下它可以在序列上工作:

 sequence = c(0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1)

解决方案不会生成随后被删除的重复项,这一点有些重要,因为如果生成重复项,更长的序列(例如 20 或 30 个)将非常需要计算。

标签: rsequencepermutation

解决方案


m = apply(gtools::permutations(2, 4, 1:4, repeats.allowed = TRUE), 1, function(x) sequence[x])
m[,colSums(m) == 2]
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    1    1    0    0    0
#[2,]    1    0    0    1    1    0
#[3,]    0    1    0    1    0    1
#[4,]    0    0    1    0    1    1

推荐阅读