On Thu, Jun 4, 2009 at 12:45 PM, Rainer M Krug <r.m.k...@gmail.com> wrote:
> On Thu, Jun 4, 2009 at 12:36 PM, Patrick Burns <pbu...@pburns.seanet.com> 
> wrote:
>> How about:
>>
>> order(x, runif(length(x)))
>
> Thanks - that is really elegant.

One thing:
it is saver to use sample(length(x)) instead of runif(length(x)), as
runif() might also produce ties. It is quite unlikely that those
result in ties for both vectors, but not impossible. That problem is
avoided with sample(length(x))

Rainer


>
> Rainer
>
>>
>>
>>
>> Patrick Burns
>> patr...@burns-stat.com
>> +44 (0)20 8525 0696
>> http://www.burns-stat.com
>> (home of "The R Inferno" and "A Guide for the Unwilling S User")
>>
>> Rainer M Krug wrote:
>>>
>>> Sorry for replying to my own post, but I found a solution. Still, a
>>> more elegant solution would be preferred.
>>>
>>> On Thu, Jun 4, 2009 at 12:02 PM, Rainer M Krug <r.m.k...@gmail.com> wrote:
>>>>
>>>> Hi
>>>>
>>>> I want to use order() to get the order of a vector.
>>>>
>>>> But I would need a different behavior when ties occur: similar to the
>>>> parameter  ties.method = "random" in the rank() function, I would need
>>>> to randomise the ties. Is this possible?
>>>
>>> The solution is to randomize the vector before submitting to order():
>>>
>>> x <- rep(1:10, 2)
>>>
>>> iS <- sample( length(x) )
>>> o <- order( x[iS], na.last=NA, decreasing=TRUE)
>>> o
>>>  [1]  8 16 12 17  2  9  7 15 10 11  4 14  3  5 13 20  1  6 18 19
>>> x[iS][o]
>>>  [1] 10 10  9  9  8  8  7  7  6  6  5  5  4  4  3  3  2  2  1  1
>>>
>>> iS <- sample( length(x) )
>>> o <- order( x[iS], na.last=NA, decreasing=TRUE)
>>> o
>>>  [1] 14 19 13 20  2 18  3 10  1 15  4  9 11 12  6  7  8 16  5 17
>>>>
>>>> x[iS][o]
>>>
>>>  [1] 10 10  9  9  8  8  7  7  6  6  5  5  4  4  3  3  2  2  1  1
>>>
>>>
>>> Thanks
>>>
>>> Rainer
>>>
>>>> Example:
>>>>
>>>> x <- rep(1:10, 2)
>>>> order(x)
>>>>  [1]  1 11  2 12  3 13  4 14  5 15  6 16  7 17  8 18  9 19 10 20
>>>> order(x)
>>>>  [1]  1 11  2 12  3 13  4 14  5 15  6 16  7 17  8 18  9 19 10 20
>>>>
>>>> ## I would need different "order" for the ties, as below in rank()
>>>> example:
>>>>
>>>> rank(x, ties.method="random")
>>>>  [1]  1  4  6  7 10 12 13 15 18 19  2  3  5  8  9 11 14 16 17 20
>>>>>
>>>>> rank(x, ties.method="random")
>>>>
>>>>  [1]  2  4  5  7  9 12 14 15 18 19  1  3  6  8 10 11 13 16 17 20
>>>>
>>>>
>>>> Thanks
>>>>
>>>> Rainer
>>>>
>>>> --
>>>> Rainer M. Krug, Centre of Excellence for Invasion Biology,
>>>> Stellenbosch University, South Africa
>>>>
>>>
>>>
>>>
>>
>
>
>
> --
> Rainer M. Krug, Centre of Excellence for Invasion Biology,
> Stellenbosch University, South Africa
>



-- 
Rainer M. Krug, Centre of Excellence for Invasion Biology,
Stellenbosch University, South Africa

______________________________________________
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