首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将给定数的序列划分成不同的组合

将给定数的序列划分成不同的组合
EN

Stack Overflow用户
提问于 2019-04-27 18:45:46
回答 1查看 148关注 0票数 0

假设我们已经给出了数列:

代码语言:javascript
复制
z=c(1,2,3,4,5)

我希望通过以下方式从这个给定的数字序列创建所有可能的类(大小不同):

1)最简单的情况是当类大小为1,即所有类大小相等时。在这种情况下,我们有以下几类: 1-2,2-3,3-4和4-5.

2)一个或多个类别的大小可等于2。

( a)我们可以有一个大小为2的类和其他大小为1的类,如下所示:1-3、3-4和4-5。同样,1-2,2-4和4-5,1-2,2-3和3-5.

( b)我们也可能有2类大小为2的案例。例如: 1-3和3-5。

3)当一个等级的大小是3,一个是1的,例如1-4和4-5 & 1-2和2-5。

4)最后,我们将有一种情况,即班级规模为4,即1-5。

请注意,在所有上述情况下,上一个类的上限等于下一个类的下限(即使类大小不等)。

在R中有办法做到这一点吗?任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 19:34:41

编辑:使用partition包添加特定的实现。

按照描述的方式,这听起来像是一种思考的方法,因为你有5个槽,它们之间有4个范围(破折号),有3个潜在的墙将范围与相邻的邻居隔开。

代码语言:javascript
复制
  | | |
1-2-3-4-5

您可以通过切换每个障碍,从所有打开的组合:

代码语言:javascript
复制
   0 0 0
 1-2-3-4-5  
 one with class of sizes of 4

对所有已关闭的人:

代码语言:javascript
复制
  | | |
1-2-3-4-5
one case with class sizes of 1
1-2
  2-3
    3-4
      4-5

所以这些组合是从000 (0)到111 (7)的所有二进制数,总共是8,等于2^n,其中n是墙的数目,也就是减去2的元素数。

一种方法可以使用这样的伪代码:

  1. 取元素数-2=表示所有解的二进制位数。
  2. 对于从0到2^(# elements 2)的每个数字,转换为二进制。
  3. 使用1的位置来分割范围。
  4. 显示所有范围。
  5. ...Profit!

看起来在R中至少有一个包可以为您解决分区问题。下面是一个使用这个和tidyverse操作的实现。

代码语言:javascript
复制
library(tidyverse)
partitions::compositions(4) %>% 
  as.matrix() %>%
  as_tibble() %>%
  mutate(position = row_number()) %>%
  gather(combo_num, segment_length, -position) %>%
  filter(segment_length > 0) %>%
  mutate(segment_label = paste0(position, "-", position + segment_length)) %>%
  select(-segment_length) %>%
  spread(position, segment_label)



# A tibble: 8 x 5
  combo_num `1`   `2`   `3`   `4`  
  <chr>     <chr> <chr> <chr> <chr>
1 V1        1-5   NA    NA    NA   
2 V2        1-2   2-5   NA    NA   
3 V3        1-3   2-4   NA    NA   
4 V4        1-2   2-3   3-5   NA   
5 V5        1-4   2-3   NA    NA   
6 V6        1-2   2-4   3-4   NA   
7 V7        1-3   2-3   3-4   NA   
8 V8        1-2   2-3   3-4   4-5  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55883774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档