Hi Carrie, Try running the following:
# function to create y using binomials and normals # -- this function is based on option 2 makey <- function(d){ spd <- with(d, split(d, x)) do.call(c, lapply(spd, function(comp) with(comp, ifelse(t == 0, rbinom(sum(t==0), 1, 0.2), rnorm(sum(t!=0)))))) } set.seed(1) # for replication transform(d, y = replicate(5, makey(d))) I ran it five times and observed different values each time, which confirms it is random. HTH, Jorge On Thu, Jun 3, 2010 at 8:22 PM, Carrie Li <> wrote: > Yes, in my case here, each strata has the same number of 0's and 1's. But I > want the y to be randomly generated within each strata, so y should have > some difference across the strata. (at least for the rnorm part we would see > much clear randomness) > (I hope what I am asking here is clear to you. ) > > Using option 2 you provided previously > the output: > > > > cbind(x, t,y) > x t y > [1,] 1 0 0.0000000 > [2,] 1 0 0.0000000 > [3,] 1 1 0.8920037 > [4,] 1 1 1.6695435 > [5,] 1 1 0.8289429 > [6,] 2 0 0.0000000 > [7,] 2 0 0.0000000 > [8,] 2 1 0.8289429 > [9,] 2 1 0.8920037 > [10,] 2 1 1.6695435 > [11,] 3 0 0.0000000 > [12,] 3 0 0.0000000 > [13,] 3 1 1.6695435 > [14,] 3 1 0.8289429 > [15,] 3 1 0.8920037 > > > For the rnorm part, it seems only take 3 values 1.66954, 0.82894, and > 0.8920 > > > > > On Thu, Jun 3, 2010 at 8:16 PM, Jorge Ivan Velez <jorgeivanve...@gmail.com > > wrote: > >> Hi Carrie, >> >> It works just fine in this case because you have the same number of 0's >> and 1's within each strata. If that would not be the case, option 1 would >> not work. That's why I provided you a second option. >> >> Best, >> Jorge >> >> >> On Thu, Jun 3, 2010 at 7:24 PM, Carrie Li <> wrote: >> >>> Thanks! Jorge >>> Just one more question I don't get it even after checking help >>> For option, why just using with(d,...), ifelse works on stratum indexed >>> by x automatically ? >>> Since in with, we didn't specify the stratum is indexed by x, what if you >>> have another categorical variable in the data ? >>> Thanks again! >>> >>> >>> >>> >>> On Thu, Jun 3, 2010 at 12:21 PM, Jorge Ivan Velez < >>> jorgeivanve...@gmail.com> wrote: >>> >>>> Hi Carrie, >>>> >>>> Here are two options: >>>> >>>> # Option 1 >>>> d <- data.frame(x, t) >>>> y <- with(d, ifelse(t == 0, rbinom(2, 1, 0.2), rbinom(3, 1, 0.8))) >>>> y >>>> >>>> # Option 2 -- more general case, e.g. you do not know >>>> # how many 0's and 1's you have within each strata >>>> spd <- with(d, split(d, x)) >>>> do.call(c, lapply(spd, function(comp) >>>> with(comp, ifelse(t == 0, rbinom(sum(t==0), 1, 0.2), >>>> rbinom(sum(t!=0), 1, 0.8))))) >>>> >>>> HTH, >>>> Jorge >>>> >>>> >>>> On Thu, Jun 3, 2010 at 11:49 AM, Carrie Li <> wrote: >>>> >>>>> Dear R-helpers, >>>>> >>>>> I would like to generate a binary random variable within a stratum's >>>>> stratum. Here is a simple example. >>>>> >>>>> >>>>> ## x is the first level strata index, here I have 3 strata. >>>>> x=c(rep(1,5), rep(2,5), rep(3,5)) >>>>> >>>>> ## within x, there is a second strata indexed by t=0 and t=1 >>>>> t=rep(c(0,0,1,1,1),3) >>>>> >>>>> >>>>> ## and within strata i and t=0 and t=1, I generate the random binomial >>>>> variable respectively, and save in y >>>>> y=rep(NA, length(x)) >>>>> for (i in 1:3) >>>>> { >>>>> y[(x==i)&(t==0)]=rbinom(2, 1, 0.2) >>>>> y[(x==i)&(t==1)]=rbinom(3, 1, 0.8) >>>>> } >>>>> >>>>> >>>>> My question: is there any way to avoid the for loop, since I have the >>>>> first >>>>> level strata has thousands of strata. (Within each x stratum, the t >>>>> only has >>>>> 2 levels, 0 and 1 ) >>>>> >>>>> Thanks for any help! >>>>> >>>>> Carrie >>>>> >>>>> [[alternative HTML version deleted]] >>>>> >>>>> >>>>> ______________________________________________ >>>>> 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]] ______________________________________________ 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.