[R] Re-ordering factors

James Reilly reilly at stat.auckland.ac.nz
Sun Oct 7 06:14:45 CEST 2007


Using reorder.factor from the stats package seems to work:

educ$ed <- reorder(educ$Education, sort(rep(1:4,5)))
levels(educ$Education)
[1] "CompletedHS"  "IncompleteHS" "Uni1-3"       "Uni4+"
levels(educ$ed)
[1] "IncompleteHS" "CompletedHS"  "Uni1-3"       "Uni4+" 
xtabs(Count ~ ed + Age_Group, data=educ)
               Age_Group
ed             25-34 35-44 45-54 55-64   >64
   IncompleteHS  5416  5030  5777  7606 13746
   CompletedHS  16431  1855  9435  8795  7558
   Uni1-3        8555  5576  3124  2524  2503
   Uni4+         9771  7596  3904  3109  2483

James

On 7/10/07 4:52 PM, maj at stats.waikato.ac.nz wrote:
> A small example before I begin my query:
> 
>> educ <- read.table(efile, header=TRUE)
>> educ
>       Education Age_Group Count
> 1  IncompleteHS     25-34  5416
> 2  IncompleteHS     35-44  5030
> 3  IncompleteHS     45-54  5777
> 4  IncompleteHS     55-64  7606
> 5  IncompleteHS       >64 13746
> 6   CompletedHS     25-34 16431
> 7   CompletedHS     35-44  1855
> 8   CompletedHS     45-54  9435
> 9   CompletedHS     55-64  8795
> 10  CompletedHS       >64  7558
> 11       Uni1-3     25-34  8555
> 12       Uni1-3     35-44  5576
> 13       Uni1-3     45-54  3124
> 14       Uni1-3     55-64  2524
> 15       Uni1-3       >64  2503
> 16        Uni4+     25-34  9771
> 17        Uni4+     35-44  7596
> 18        Uni4+     45-54  3904
> 19        Uni4+     55-64  3109
> 20        Uni4+       >64  2483
>> xtabs(Count ~ Education + Age_Group, data=educ)
>               Age_Group
> Education        >64 25-34 35-44 45-54 55-64
>   CompletedHS   7558 16431  1855  9435  8795
>   IncompleteHS 13746  5416  5030  5777  7606
>   Uni1-3        2503  8555  5576  3124  2524
>   Uni4+         2483  9771  7596  3904  3109
> 
> Naturally I would prefer the factor levels in their natural ordering in
> the table. I would like to re-order the levels of the factors to achieve
> this.
> 
> I have tried reorder() in the gdata package:
> 
>> ed <- reorder(Education,neworder= c("IncompleteHS","CompletedHS",
> +                           "Uni1-3","Uni4+"))
>> agrp <- reorder(Age_Group,neworder=
> +       c("25-34","35-44","45-54","55-64",">64"))
>> xtabs(Count ~ ed + agrp)
>               agrp
> ed             25-34 35-44 45-54 55-64   >64
>   CompletedHS  16431  1855  9435  8795  7558
>   IncompleteHS  5416  5030  5777  7606 13746
>   Uni1-3        8555  5576  3124  2524  2503
>   Uni4+         9771  7596  3904  3109  2483
> 
> which works on one factor but not the other.
> 
> I have fooled a bit with reorder.factor() but I can't seem to figure out
> how to drive it!
> 
> Cheers,  Murray Jorgensen

-- 
James Reilly
Department of Statistics, University of Auckland
Private Bag 92019, Auckland, New Zealand



More information about the R-help mailing list