Hi all, I'm working on a seemingly trivial problem that I can't figure out how to implement in R. I'd be most grateful for any help here. I want to do the following: first, randomly assign each of n units to one of g groups of size n/g. Then, randomly re-assign each of the n units to a different group (i.e., same as the first step, but the unit can't be assigned to a group to which it's already belonged). Then repeat this step until each unit has at some point been assigned to every group. More concretely, say I have 60 units and 3 groups into which to divide the units. I could first do something like: group1<-sample(1:60,20) group2<-sample(setdiff(1:60,group1),20) group3<-sample(setdiff(1:60,c(group1,group2)),20) But then how to randomly re-assign group membership such that all units are assured a different group assignment in the second "wave" of grouping? Just narrowing the sampling pool to those units that weren't previously assigned to a given group won't work (consider the case where groups 1 and 2 swap units: in the second wave, there would be no units to assign to group 3 as all the remaining units had already been in group 3 in the first wave). Most grateful for any assistance, David
Hi why not shuffle your values by x <- 1:60 x <- sample(x, 60) and then add groups groups <- rep(paste("g",1:3, sep=""), each=20) If you want you can suffle also groups. Regards Petr> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of David A. Kim > Sent: Tuesday, August 21, 2012 6:17 AM > To: r-help at r-project.org > Subject: [R] Iterative sampling with restrictions > > Hi all, > > I'm working on a seemingly trivial problem that I can't figure out how > to implement in R. I'd be most grateful for any help here. > > I want to do the following: first, randomly assign each of n units to > one of g groups of size n/g. Then, randomly re-assign each of the n > units to a different group (i.e., same as the first step, but the unit > can't be assigned to a group to which it's already belonged). Then > repeat this step until each unit has at some point been assigned to > every group. > > More concretely, say I have 60 units and 3 groups into which to divide > the units. I could first do something like: > > group1<-sample(1:60,20) > group2<-sample(setdiff(1:60,group1),20) > group3<-sample(setdiff(1:60,c(group1,group2)),20) > > But then how to randomly re-assign group membership such that all units > are assured a different group assignment in the second "wave" of > grouping? Just narrowing the sampling pool to those units that weren't > previously assigned to a given group won't work (consider the case > where groups 1 and 2 swap units: in the second wave, there would be no > units to assign to group 3 as all the remaining units had already been > in group 3 in the first wave). > > Most grateful for any assistance, > > David > > ______________________________________________ > R-help at 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.
> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] > On Behalf Of David A. Kim > Sent: Monday, August 20, 2012 9:17 PM > To: r-help at r-project.org > Subject: [R] Iterative sampling with restrictions > > Hi all, > > I'm working on a seemingly trivial problem that I can't figure out how > to implement in R. I'd be most grateful for any help here. > > I want to do the following: first, randomly assign each of n units to > one of g groups of size n/g. Then, randomly re-assign each of the n > units to a different group (i.e., same as the first step, but the unit > can't be assigned to a group to which it's already belonged). Then > repeat this step until each unit has at some point been assigned to > every group. > > More concretely, say I have 60 units and 3 groups into which to divide > the units. I could first do something like: > > group1<-sample(1:60,20) > group2<-sample(setdiff(1:60,group1),20) > group3<-sample(setdiff(1:60,c(group1,group2)),20) > > But then how to randomly re-assign group membership such that all > units are assured a different group assignment in the second "wave" of > grouping? Just narrowing the sampling pool to those units that > weren't previously assigned to a given group won't work (consider the > case where groups 1 and 2 swap units: in the second wave, there would > be no units to assign to group 3 as all the remaining units had > already been in group 3 in the first wave). > > Most grateful for any assistance, > > David >David, I would collect the sample waves into a data.frame. I am sure someone will be able to help you with a more general and/or efficient solution, but to get you started I have provided one possible solution to your 60 unit 3 wave example #create data.frame with IDs df <- data.frame(id=1:60) #create first sample wave df$wave1 <- sample(rep(1:3,20)) #reorder df and create second wave sample df <- df[order(df$wave1),] df$wave2 <- c(sample(rep(c(2,3),10)), sample(rep(c(1,3),10)),sample(rep(c(1,2),10))) #now use set diff to create 3rd wave for(i in 1:60) df[i,'wave3'] <- unlist(setdiff(1:3,df[i,2:3])) df Hope this is helpful, Dan Daniel Nordlund Bothell, WA USA