On Thu, Mar 22, 2012 at 11:42:53AM -0700, aly wrote:
> Hi,
> 
> I want to randomly pick 2 fish born the same day but I need those
> individuals to be from different families. My table includes 1787 fish
> distributed in 948 families. An example of a subset of fish born in one
> specific day would look like:
> 
> >fish
> 
> fam   born  spawn
> 25    46      43
> 25    46      56
> 26    46      50
> 43    46      43
> 131   46      43
> 133   46      64
> 136   46      43
> 136   46      42
> 136   46      50
> 136   46      85
> 137   46      64
> 142   46      85
> 144   46      56
> 144   46      64
> 144   46      78
> 144   46      85
> 145   46      64
> 146   46      64
> 147   46      64
> 148   46      78
> 149   46      43
> 149   46      98
> 149   46      85
> 150   46      64
> 150   46      78
> 150   46      85
> 151   46      43
> 152   46      78
> 153   46      43
> 156   46      43
> 157   46      91
> 158   46      42
> 
> Where "fam" is the family that fish belongs to, "born" is the day it was
> born (in this case day 46), and "spawn" is the day it was spawned. I want to
> know if there is a correlation in the day of spawn between fish born the
> same day but that are unrelated (not from the same family). 
> I want to randomly select two rows but they have to be from different fam.
> The fist part (random selection), I got it by doing:
> 
> > ran <- sample(nrow (fish), size=2); ran
> 
> [1]  9 12
> 
> > newfish <- fish [ran,];  newfish
> 
>     fam born spawn
> 103 136   46    50 
> 106 142   46    85 
> 
> In this example I got two individuals from different families (good) but I
> will repeat the process many times and there's a chance that I get two fish
> from the same family (bad):
> 
> > ran<-sample (nrow(fish), size=2);ran
> 
> [1] 26 25
> 
> > newfish <-fish [ran,]; newfish
> 
>     fam born spawn
> 127 150   46    85
> 126 150   46    78
> 
> I need a conditional but I have no clue on how to include it in the code.

Hi.

Try the following.

  while (1) {
    ran <- sample(nrow(fish), size=2)
    if (fish[ran[1], 1] != fish[ran[2], 1]) break
  }
  fish[ran, ]

This will generate only pairs from different families. However,
note that the loop will run forever, if the data contain only
fish from one family.

Hope this helps.

Petr Savicky.

______________________________________________
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.

Reply via email to