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 <[email protected]> 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.
>
> ______________________________________________
> [email protected] 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]]
______________________________________________
[email protected] 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.