【发布时间】:2020-06-22 02:34:33
【问题描述】:
我有一个向量
x<- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
我想将它分成 5 组,它们或多或少相等:三组将包含两个数字,两组将包含三个数字。换句话说,不会有剩菜。
【问题讨论】:
我有一个向量
x<- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
我想将它分成 5 组,它们或多或少相等:三组将包含两个数字,两组将包含三个数字。换句话说,不会有剩菜。
【问题讨论】:
我们可以使用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<-c("dd", "ff", "rr", "hah", "kek", "ft", "uh", "qw", "er", "gh", "mk", "kk")
cut(seq_along(x), ...) 更适用于任何情况。
seq_along 更通用。更新了答案@Julia
基础 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")
【讨论】: