[R] Sorting alphanumerically

Marc Schwartz (via MN) mschwartz at mn.rr.com
Fri Feb 24 20:10:17 CET 2006


On Fri, 2006-02-24 at 12:54 -0600, mtb954 mtb954 wrote:
> I'm trying to sort a DATAFRAME by a column "ID" that contains
> alphanumeric data. Specifically,"ID" contains integers all preceeded
> by the character "g" as in:
> 
> g1, g6, g3, g19, g100, g2, g39
> 
> I am using the following code:
> 
> DATAFRAME=DATAFRAME[order(DATAFRAME1$ID),]
> 
> and was hoping it would sort the dataframe by ID in the following manner
> 
> g1, g2, g3, g6, g19, g39, g100
> 
> but it doesn't sort at all. Could anyone point out my mistake?
> 
> Thank you.
> 
> Mark

The values are being sorted by character based ordering, which may be
impacted upon by your locale.

Thus, on my system, you end up with something like the following:

> ID[order(ID)]
[1] "g1"   "g100" "g19"  "g2"   "g3"   "g39"  "g6"


What you can do, based upon the presumption that the prefix of 'g' is
present as you describe above, is:

> ID[order(as.numeric((gsub("g", "", ID))))]
[1] "g1"   "g2"   "g3"   "g6"   "g19"  "g39"  "g100"


What this does is to use gsub() to strip the 'g' and then order by
numeric value.


HTH,

Marc Schwartz




More information about the R-help mailing list