[R] Ordering long vectors

Thomas Lumley tlumley at u.washington.edu
Sun Jun 8 18:01:33 CEST 2003


On Sun, 8 Jun 2003, [ISO-8859-1] Göran Broström wrote:

> On Sat, 7 Jun 2003, Göran Broström wrote:
>
> >
> > I need to order a long vector of integers with rather few unique values.
> > This is very slow:
> >
> > > x <- sample(rep(c(1:10), 50000))
> > > system.time(ord <- order(x))
> > [1] 189.18   0.09 190.48   0.00   0.00
> >
> > But with no ties
> >
> > > y <- sample(500000)
> > > system.time(ord1 <- order(y))
> > [1] 1.18 0.00 1.18 0.00 0.00
> >
> > it is very fast!
> > This gave me the following idea: Since I don't care about keeping the
> > order within tied values, why not add some small disturbance to  x,

Another option:

> system.time(a<-sapply(sort(unique(x)),function(i) which(x==i)))

This turns out to be slightly slower than your method, but doesn't require
that you know what the smallest difference between values is (and works
for characters as well as numbers)

	-thomas




More information about the R-help mailing list