# [R] Splitting a vector into equal groups

Berwin A Turlach berwin at maths.uwa.edu.au
Mon May 4 09:11:12 CEST 2009

```G'day Utkarsh,

On Mon, 04 May 2009 11:51:21 +0530
utkarshsinghal <utkarsh.singhal at global-analytics.com> wrote:

> I have vector of length 52, say, x=sample(30,52,replace=T). I want to
> sort x and split into five *nearly equal groups*.

What do you mean by *nearly equal groups*?  The size of the groups
should be nearly equal? The sum of the elements of the groups should be
nearly equal?

> Note that the observations are repeated in x so in case of a tie I
> want both the observations to fall in same group.

Then it becomes even more important to define what you mean with
"nearly equal groups".

As a start, you may consider:

R> set.seed(1)
R> x=sample(30,52,replace=T)
R> xrle <- rle(sort(x))
R> xrle
Run Length Encoding
lengths: int [1:25] 2 1 2 2 3 1 1 1 5 1 ...
values : int [1:25] 1 2 4 6 7 8 9 11 12 13 ...
R> cumsum(xrle\$lengths)
[1]  2  3  5  7 10 11 12 13 18 19 24 25 26 28 29 32 35 38
[19] 43 45 46 48 49 51 52

and use this to determine our cut-offs.  E.g., should the first group
have 10, 11 or 12 elements in this case?  The information in xrle
should enable you to construct your five groups once you have decided
on a grouping.

HTH.

Cheers,

Berwin