# [R] A particular shuffling on a vector

Peter Alspach PAlspach at hortresearch.co.nz
Fri Apr 20 03:53:57 CEST 2007

```Emmanuel

One option which appears to work:

emmanuel <- c(1,1,1,2,2,3,3,3)
#emmanuel <- c(1,1,2,3,4,5,6,6,6,6,6,6,6,6,7,8)
runs <- rle(emmanuel)[[1]]
shuffle <- sample(1:length(runs))
newEmm <- rep(emmanuel[cumsum(runs)[shuffle]], runs[shuffle])
startPos <- sample(1:length(emmanuel), 1)
if (startPos==1) newEmm else
newEmm[c(startPos:length(newEmm),1:(startPos-1))]

Peter Alspach

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Emmanuel Levy
> Sent: Friday, 20 April 2007 1:03 p.m.
> To: r-help at stat.math.ethz.ch
> Subject: [R] A particular shuffling on a vector
>
> Hello,
>
> I was wondering if anyone can think of a straightforward way (without
> loops) to do the following shuffling:
>
> Let's imagine a vector:
> c(1,1,1,2,2,3,3,3)
>
> I would like to derive shuffled vectors __where the same
> digits are never separated__, although they can be at both
> ends (periodicity).
>
> So the following shuffled vectors are possible:
>
> c(2,2,1,1,1,3,3,3)
> c(2,1,1,1,3,3,3,2)
> c(3,3,3,1,1,1,2,2)
> c(3,1,1,1,2,2,3,3)
> etc ...
>
> I should mention that there can be any number of different
> numbers, and any number of repetition of each number.
>
> So the vectors I have to deal with could look like
> c(1,1,2,3,4,5,6,6,6,6,6,6,6,6,7,8) for example
>
> Since I have to derive many shuffled versions for each
> vector, I am looking for an efficient way of doing it. Can
> you think of a way without nested loops?
>
> Many thanks for your help,
>
> Best,
>
> Emmanuel
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help