[R] biasing conditional sample

David L Carlson dcarlson at tamu.edu
Sun Nov 11 23:52:43 CET 2012


Can't you just use sample() on each row without replacement to guarantee no
matches among the five (or more) columns?

set.seed(51)
Data <- sapply(1:100, function(x) sample(1:10, size=5))
Data <- data.frame(t(Data))
names(Data) <- letters[1:5]

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Rui Barradas
> Sent: Sunday, November 11, 2012 4:36 PM
> To: dms at riseup.net
> Cc: r-help at r-project.org
> Subject: Re: [R] biasing conditional sample
> 
> Hello,
> 
> The function that follows returns a matrix, not a data.frame but does
> what you ask for.
> 
> 
> fun <- function(x, y, n){
>      f <- function(x, y){
>          while(TRUE){
>              rnd <- sample(x, 1)
>              if(!any(rnd %in% y)) break
>          }
>          rnd
>      }
>      for(i in seq_len(n)){
>          tmp <- apply(y, 1, function(.y) f(x, .y))
>          y <- cbind(y, tmp)
>      }
>      y
> }
> 
> 
> a <- cbind(sample(1:10, 100, TRUE)) # must have dims
> fun(1:10, a, 4)  # returns 5 columns, 'a' plus 4
> 
> 
> Hope this helps,
> 
> Rui Barradas
> Em 11-11-2012 19:06, dms at riseup.net escreveu:
> > Hi all,
> >
> > I'm looking for some help to bias the sample function. Basically, I'd
> like
> > to generate a data frame where the first column is completely random,
> the
> > second, however, is conditional do the first, the third is
> conditional to
> > the first and the second and so on. By conditional I mean that I
> shouldn't
> > have repeated values in the line. I know it could be easily
> implemented
> > using permutation, but it is not the case here. I need at least five
> > columns. Any idea to achieve what do I need?
> >
> >
> > set.seed(51)
> >   data <- data.frame(
> >       id=as.factor(1:100),
> >       a=as.factor(sample(1:10, size=100, replace=TRUE)),
> >       b=as.factor(sample(1:10, size=100, replace=TRUE)),
> >       c=as.factor(sample(1:10, size=100, replace=TRUE)),
> >       d=as.factor(sample(1:10, size=100, replace=TRUE)),
> >       e=as.factor(sample(1:10, size=100, replace=TRUE))
> > )
> >
> > ______________________________________________
> > 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.
> 
> ______________________________________________
> 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.




More information about the R-help mailing list