Thanks for the solutions. Carlson's and Barradas's approaches give me what I need. Nonetheless, Carlson's proposal is slightly better for my purposes because it's shorter.
Thanks Daniel > 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-boun...@r-project.org [mailto:r-help-bounces@r- >> project.org] On Behalf Of Rui Barradas >> Sent: Sunday, November 11, 2012 4:36 PM >> To: d...@riseup.net >> Cc: r-help@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, d...@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@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@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@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.