# [R] simple randomization question: How to perform "sample" in chunks

Charles C. Berry cberry at tajo.ucsd.edu
Thu Aug 20 18:57:21 CEST 2009

```On Thu, 20 Aug 2009, Tal Galili wrote:

> Hello dear R-help group.
>
> My task looks simple, but I can't seem to find a "smart" (e.g: non loop)
> solution to it.
>
> Task: I wish to randomize a data.frame by one column, while keeping the
> inner-order in the second column as is.

xx[ order( sample( unique( xx\$a ) )[ xx\$a ] ), ]

HTH,

Chuck

>
> So for example, let's say I have the following data.frame:
>
> xx <-data.frame(a=  c(1,2,2,3,3,3,4,4,4,4) ,
>                        b =  c(1,1,2,1,2,3,1,2,3,4) )
>
> I would like to shuffle it by column "a", while keeping the order in column
> "b".
>
> Here is my "not-smart" way of doing it:
>
> # R example
> xx <-data.frame(a=  c(1,2,2,3,3,3,4,4,4,4) ,
>                        b =  c(1,1,2,1,2,3,1,2,3,4) )
>
> randomize.by.column.a <- function(xx)
> {
> new.a.order <- sample(unique(xx\$a))
> new.xx <- NULL
> for(i in new.a.order)
> {
>  xx.subset <- xx[ xx\$a %in% i ,]
>  new.xx <- rbind(new.xx ,  xx.subset)
> }
>
> return(new.xx)
> }
> randomize.by.column.a(xx)
> # END of - R example
>
>
>
> I would love for a better, faster, way of doing it.
>
> Thanks,
> Tal
>
>
>
>
>
>
>
>
>
>
> --
> ----------------------------------------------
>
>
> My contact information:
> Tal Galili
> Phone number: 972-50-3373767
> My Blogs:
> http://www.r-statistics.com/
> http://www.talgalili.com
> http://www.biostatistics.co.il
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help