[R] biasing conditional sample

dms at riseup.net dms at riseup.net
Mon Nov 12 00:26:55 CET 2012


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