Разбить вектор на почти равные группы без остатков - PullRequest
1 голос
/ 10 марта 2020

У меня есть вектор

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

И я хочу разделить его на 5 групп, которые будут более или менее равны: три группы будут содержать два числа, а две группы будут содержать три числа. Другими словами, останков не будет.

Ответы [ 2 ]

4 голосов
/ 10 марта 2020

Мы можем использовать 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
1 голос
/ 10 марта 2020

Решение Base 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")
...