Hi:

A couple more approaches to consider:

# Utility function to extract two rows from a data frame
# Meant to be applied to each data subset
sampler <- function(d) if(nrow(d) > 2) d[sample(1:nrow(d), 2, replace =
FALSE), ] else d

library(plyr)
> ddply(x, 'id', sampler)
  id v1 V2
1  1  2 13
2  1  1 12
3  2  4 15
4  2  6 17
5  3  8 19
6  3 10 21
7  4 11 22
8  4 12 23

library(data.table)
dtx <- data.table(x, key = 'id')
> dtx[, sampler(.SD), by = 'id']
     id v1 V2
[1,]  1  1 12
[2,]  1  3 14
[3,]  2  5 16
[4,]  2  7 18
[5,]  3  9 20
[6,]  3 10 21
[7,]  4 11 22
[8,]  4 12 23


HTH,
Dennis


On Wed, Feb 16, 2011 at 8:35 PM, yf <chang648@umn.edu> wrote:

>
> I want to sample from the ID. For each ID, i want to have 2 set of data. I
> try the sample() function but it didn't work.
>
> > x<-data.frame(id=c(1,1,1,2,2,2,2,3,3,3,4,4), v1=c(1:12), V2=c(12:23))
> > x
>   id v1 V2
> 1   1  1 12
> 2   1  2 13
> 3   1  3 14
> 4   2  4 15
> 5   2  5 16
> 6   2  6 17
> 7   2  7 18
> 8   3  8 19
> 9   3  9 20
> 10  3 10 21
> 11  4 11 22
> 12  4 12 23
> --
> View this message in context:
> http://r.789695.n4.nabble.com/sampling-tp3310184p3310184.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]

