【问题标题】:How would I find all combinations/permutations with order mattering in R?我如何在 R 中找到与顺序有关的所有组合/排列?
【发布时间】:2018-05-05 08:47:16
【问题描述】:

您好,感谢您的关注。我不完全确定如何提出这个问题 - 让我向您展示一个示例以及我希望返回的内容。

example <- c(1, 2, 3, 4, 5, 6)
example_combos <- combn(example, 4) 

1) 我如何调整 combn() 只给我包括数字 1 在内的组合?此外,我不想让三个或更多数字的序列连续排列。 即:(1,2,4,5), (1,2,4,6), (1,2,5,6), (1,3,4,5), (1,3,4,6), (1,3,5,6)

2) 或者,我实际上如何允许顺序重要 - 意思是 (1,2,4,5)(2,4,5,1) 不同。在这种情况下,我如何不允许连续 3 个或更多的序列 - 然后,我将如何对数据框进行子集化以仅包含以 1 开头的列?

谢谢!对 R 还是很陌生!

【问题讨论】:

  • 这里有术语问题?对于不同对象的组合,排序不应该成为问题。这个概念可能适用于排列,但不适用于组合。
  • 谢谢!我也会检查置换函数,但主要是 - 我将如何在一个序列中添加不超过 2 个数字的限制(即从不 (1,2,3,5))?
  • 耐心点,蚱蜢,我正在努力。快完成了。

标签: r combn


【解决方案1】:

这是答案(或无论如何都是答案)。

example_combos[ , apply( example_combos, 2, function(col){ !any( rle(diff(col))$lengths >= 2 & rle(diff(col))$values==1)   })  ]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1    1    1    2
[2,]    2    2    2    3    3    3
[3,]    4    4    5    4    5    5
[4,]    5    6    6    6    6    6

这里有一个解释:

我正在计算在 example_combos 矩阵的任何给定列中组合(已排序)的连续差异中出现 1 的次数。如果它大于或等于 2,则意味着至少运行 3。

【讨论】:

  • 好的,我正在检查这个。谢谢!
  • 好的,谢谢一百万万亿。也许你可以帮助我解决下一个挑战。我将如何通过仅具有第一行为 1 的列进行子集化。此外,我将如何将新设置转置为 1,但其中 13 = 1 和 14 = 2 等。
  • 哦,拍!而且,这基本上是一个圆圈,所以 11、12、1 也不应该发生 - 你能帮我调整一下吗?
  • 第一项 == 1 就是example_combos[ example_combos[ 1,] == 1 , ]。但我不明白关于 13=1 和 14=2 的第二部分。可能需要另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多