[R] tapply changing order of factor levels?

Bert Gunter gunter.berton at gene.com
Wed May 6 16:59:00 CEST 2009


Jim's advice is patently false. Please read ?tapply for correct details.

Counterexample:

> y <- rnorm(6)
> x <- factor(rep(factor(letters[1:3],lev = letters[3:1]),2))
> x
[1] a b c a b c
Levels: c b a
> tapply(y,x,mean)
         c          b          a 
 0.4545897 -1.0544782  0.4682773   

Bert Gunter
Genentech Nonclinical Statistics


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of jim holtman
Sent: Wednesday, May 06, 2009 6:57 AM
To: Chirantan Kundu
Cc: r-help at r-project.org
Subject: Re: [R] tapply changing order of factor levels?

The result of 'tapply' is just a named vector and the names are in
alphabetical order.  If you want them printed in a different order, then you
have to specify it.  Since you have the order in 'mylevels', this will work:

> str(mysummary)
 int [1:3(1d)] 4 3 2
 - attr(*, "dimnames")=List of 1
  ..$ : chr [1:3] "IN0019800021" "IN0020020064" "IN0020020155"
> mysummary[mylevels]
IN0020020155 IN0019800021 IN0020020064
           2            4            3
>


On Wed, May 6, 2009 at 9:45 AM, Chirantan Kundu <chirantan at 2pirad.com>wrote:

> Hi,
>
> Does tapply change the order when applied on a factor? Below is the code I
> tried.
>
> > mylevels<-c("IN0020020155","IN0019800021","IN0020020064")
> >
>
>
mydata<-c("IN0020020155","IN0019800021","IN0020020064","IN0020020155","IN001
9800021","IN0019800021","IN0020020064","IN0020020064","IN0019800021")
> > myfactor<-factor(mydata,levels=mylevels)
> > myfactor
> [1] IN0020020155 IN0019800021 IN0020020064 IN0020020155 IN0019800021
> IN0019800021 IN0020020064 IN0020020064 IN0019800021
> Levels: IN0020020155 IN0019800021 IN0020020064
> > summary(myfactor)
> IN0020020155 IN0019800021 IN0020020064
>           2            4            3
>
> # Everything fine upto this point. The order of levels is maintained as it
> is.
>
> > mysummary<-tapply(myfactor,mydata,length)
> > mysummary
> IN0019800021 IN0020020064 IN0020020155
>           4            3            2
>
> # Now the order has changed.
>
> Is this the expected behavior? Any idea on how to avoid the change in
> order?
>
> Regards,
> Chirantan
>
> ____________________________________
> Visit us at http://www.2pirad.com
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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<http://www.r-project.org/posting
-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

	[[alternative HTML version deleted]]

______________________________________________
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