r - 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 个)将非常需要计算。
解决方案
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
推荐阅读
- java - 如何使用 Java 代理拦截返回变量
- javascript - 无刷新文档页面及其完成方式
- python - 使用 python 将 geopandas 数据框转换为 GEE 特征集合
- c - 这个循环使用数组括号与 C 中的指针表示法有什么区别?
- c++ - 创建CRUD C++更新函数的难点
- angular - 使用角度 ssr 9 两次加载图像和闪烁的站点
- android - 如何检测 seekbar 是否没有被移动并且没有值(然后发送 toast)
- c++ - 无法调用返回 char 的类中的函数
- c# - 在属性中使用输入参数(Asp Core 3.1)
- logging - 通过 SYSLOG_IDENTIFIER 获取 Docker 日志到 Fluentd