# Re: [R] Question about avoid the for loop

From: Carrie Li <carrieandstat_at_gmail.com>
Date: Thu, 03 Jun 2010 20:22:02 -0400

Using option 2 you provided previously
the output:

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 <jorgeivanvelez_at_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 <
>> jorgeivanvelez_at_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_at_r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>
>>>
>>
>

[[alternative HTML version deleted]]

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. Received on Fri 04 Jun 2010 - 00:24:09 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 04 Jun 2010 - 00:40:28 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.