[R] ideas on sorting
William Dunlap
wdunlap at tibco.com
Mon Mar 14 18:47:39 CET 2011
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of array chip
> Sent: Monday, March 14, 2011 10:33 AM
> To: r-help at r-project.org
> Subject: [R] ideas on sorting
>
> Hi, I have a character vector as below:
>
> a<-c('10','3R','4','4R','5','5R','6','6R','7','8','9','7R','1'
> ,'10R','11'
> ,'11R','12','12R','13','13R','14','14R','15','15R','1R','2','2
> R','3','8R'
> ,'9R')
>
> Is there a clever way to sort this easily to return a vector
> of index that would
> produce a vector as below:
>
> a[index]:
>
> [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
> [11] "11" "12" "13" "14" "15" "1R" "2R" "3R" "4R" "5R"
> [21] "6R" "7R" "8R" "9R" "10R" "11R" "12R" "13R" "14R" "15R"
Break up the strings into an initial number (as a number,
not a string, for they sort differently) and a trailing
string starting with the first non-digit. Order them by
the trailing string, breaking ties with the initial number:
> index <- order(gsub("^[[:digit:]]+", "", a), # trailing string
as.integer(gsub("([[:digit:]]+).*$", "\\1", a))) # break ties with
initial numbers
> a[index]
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
"12"
[13] "13" "14" "15" "1R" "2R" "3R" "4R" "5R" "6R" "7R" "8R"
"9R"
[25] "10R" "11R" "12R" "13R" "14R" "15R"
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
>
> Thanks,
>
> John
>
>
>
> [[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