# RE: [Rd] reorder [stats] and reorder.factor [lattice]

From: Warnes, Gregory R <gregory_r_warnes_at_groton.pfizer.com>
Date: Sat 04 Sep 2004 - 02:36:12 EST

Combining it with the version provided by Deepayan we get:

reorder.factor <- function(x,

```                           order,
X,
FUN,
sort=mixedsort,
make.ordered = is.ordered(x),
... )
```

{
constructor <- if (make.ordered) ordered else factor

if (!missing(order))

```      {
if (is.numeric(order))
order = levels(x)[order]
else
order = order
}
else if (!missing(FUN))
order = names(sort(tapply(X, x, FUN, ...)))
else
order = sort(levels(x))

```

constructor( x, levels=order)

}

Yielding:

> # Create a 4 level example factor

> trt <- factor( sample( c("PLACEBO","300 MG", "600 MG", "1200 MG"),

```+                   100, replace=TRUE ) )
```
> summary(trt)
1200 MG 300 MG 600 MG PLACEBO
18 24 30 28
> # Note that the levels are not in a meaningful order.
```>
>
```

> # Change the order to something useful
> # default "mixedsort" ordering

> trt2 <- reorder(trt)
> summary(trt2)
300 MG 600 MG 1200 MG PLACEBO
24 30 18 28
> # using indexes:

> trt3 <- reorder(trt, c(4,2,3,1))
> summary(trt3)
PLACEBO 300 MG 600 MG 1200 MG
28 24 30 18
> # using label names:

> trt4 <- reorder(trt, c("PLACEBO","300 MG", "600 MG", "1200 MG") ) > summary(trt4)
PLACEBO 300 MG 600 MG 1200 MG
28 24 30 18
> # using frequency

> trt5 <- reorder(trt, X=as.numeric(trt), FUN=length) > summary(trt5)
1200 MG 300 MG PLACEBO 600 MG
18 24 28 30
```>
>
```

> # drop out the '300 MG' level

> trt6 <- reorder(trt, c("PLACEBO", "600 MG", "1200 MG") ) > summary(trt6)
PLACEBO 600 MG 1200 MG NA's

28 30 18 24
>

-Greg

(the 'mixedsort' function is available in the gregmisc package, or on request)

```> -----Original Message-----
> From: r-devel-bounces@stat.math.ethz.ch
> [mailto:r-devel-bounces@stat.math.ethz.ch]On Behalf Of Deepayan Sarkar
> Sent: Friday, August 27, 2004 3:32 PM
> To: Prof Brian Ripley
> Cc: r-devel@stat.math.ethz.ch
> Subject: Re: [Rd] reorder [stats] and reorder.factor [lattice]
>
>
> On Friday 27 August 2004 11:17, Prof Brian Ripley wrote:
> > On Fri, 27 Aug 2004, Deepayan Sarkar wrote:
> > > It was recently pointed out on the lists that the S-PLUS
> Trellis suite
> > > has a function called reorder.factor that's useful in
> getting useful
> > > ordering of factors for graphs. I happily went ahead and
> implemented it,
> > > but it turns out that R (not S-PLUS) has a generic called
> reorder (with a
> > > method for "dendrogram"). Naturally, this causes R to
> think I'm defining
> > > a method for "factor", and gives a warning during check because of
> > > mismatching argument names.
> > >
> > > Any suggestions as to what I should do? Retaining S
> compatibility doesn't
> > > seem to be an option. I could make a reorder method for
> "factor" (which
> > > sounds like a good option to me), or rename it to something like
> > > reorderFactor.
> >
> > I am pretty sure you don't want to copy the Trellis call, which is
> >
> > function(Factor, X, Function = mean, ...)
> >
> > and suggests it dates from the days when S3 lookup could
> not distingush
> > functions from other objects by context, hence the
> capitalization.  Even
> > then, it is inconsistent with tapply etc which use FUN.
> >
> > reorder.factor <- function(x, X, FUN=mean)
> >
> > looks about right.  Another problem though: in Trellis
> reorder.factor
> > doesn't just reorder the factor, it makes it an ordered
> factor.  I don't
> > really see why, especially as the modelling functions
> assume that ordered
> > means equally spaced.  If this is to be used more generally
> (as Kjetil
> > Halvorsen suggests) then it should record the scores used to do the
> > ordering in an attribute.
>
> Well, the ordered factor issue had come up before, and I
> currently define this
> as
>
>
> which is different from the S-PLUS version in 2 ways:
>
> 1. for (unordered) factors, it changes the levels, but keeps
> it a factor
>
> 2. it works for non-factors as well (which is moot if it's
> going to be
>    a factor method)
>
>
> Implementation details aside, this seems to me like a good
> candidate for stats
> (although it'll probably be used very little). lattice
> functions (will) have
> an alternative way of determining panel order based on panel
> contents, which
> makes more sense to me in the plotting context.
>
> Deepayan
>
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

```

LEGAL NOTICE\ Unless expressly stated otherwise, this messag...{{dropped}}

R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sat Sep 04 03:20:29 2004

This archive was generated by hypermail 2.1.8 : Fri 18 Mar 2005 - 09:00:04 EST