【问题标题】:Split a vector into almost equal groups without leftovers将向量分成几乎相等的组,没有剩余
【发布时间】:2020-06-22 02:34:33
【问题描述】:

我有一个向量

x<- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

我想将它分成 5 组,它们或多或少相等:三组将包含两个数字,两组将包含三个数字。换句话说,不会有剩菜。

【问题讨论】:

    标签: r vector split


    【解决方案1】:

    我们可以使用cut 来定义组,并使用split 将它们放入单独的列表中。

    n <- 5
    split(x, cut(seq_along(x), breaks = n, labels = FALSE))
    
    #$`1`
    #[1] 1 2 3
    
    #$`2`
    #[1] 4 5
    
    #$`3`
    #[1] 6 7
    
    #$`4`
    #[1] 8 9
    
    #$`5`
    #[1] 10 11 12
    

    【讨论】:

    • 谢谢。如果x 是一个名称列表,解决方案将如何改变?例如x&lt;-c("dd", "ff", "rr", "hah", "kek", "ft", "uh", "qw", "er", "gh", "mk", "kk")
    • 也许cut(seq_along(x), ...) 更适用于任何情况。
    • 是的,seq_along 更通用。更新了答案@Julia
    【解决方案2】:

    基础 R 解决方案:

    n <- 5
    split(x, sort(x%%n))
    split(y, sort(1:length(y)%%n))
    

    数据:

    x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    y <- c("dd", "ff", "rr", "hah", "kek", "ft", "uh", "qw", "er", "gh", "mk", "kk")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多