Another option:

require(gtools)
?mixedsort

> mixedsort(fileNames)
[1] "A1"  "A2"  "A10" "B1"  "B2"  "B10"

-- David

On Jul 18, 2010, at 5:16 AM, Duncan Mackay wrote:

Hi

Yes it is possible- one way is:

fileNames[order(sprintf("%02s", sub("[[:upper:]]","", fileNames)))]
[1] "A1"  "B1"  "A2"  "B2"  "A10" "B10"

Regards

Duncan

Duncan Mackay
Department of Agronomy and Soil Science
University of New England
ARMIDALE NSW 2351
Email home: mac...@northnet.com.au

At 06:47 18/07/2010, you wrote:


> I get some file names by list.files().
> These names are in  alphabetical order.
> I want to change it to logical numeric  order.
> Example:
> > fileNames <- c("A10", "A1", "A2", "B1", "B2",  "B10")
> > sort(fileNames)
> [1] "A1"  "A10" "A2"  "B1"   "B10" "B2"
> I want to have:
> "A1"  "A2" "A10" "B1" "B2" "B10"
>
> Is  this possible?

Greetings. I see that you've gotten an elegant solution to your problem. I've appended a poor-man's solution, which I generated more for my own
edification than for yours.

-- Mike


## modified file names, changed to exhibit sorting on letters
fileNames <- c("A10", "B10", "A1", "A2", "B1", "B2"); fileNames

## use regular expressions to pick off letters, numbers
fnLet <- gsub("(^[^0-9]+).*$", "\\1", fileNames); fnLet
fnNum <- gsub("^[^0-9]+(.*)$", "\\1", fileNames); fnNum

## need to force numeric sorting of the numbers
fnNum <- as.numeric(fnNum)

## find the order of the numbers, for later use in subsetting
fnNumOrd <- order(fnNum); fnNumOrd

## pack all the relevant information into a data frame, then select from that fnPieces <- data.frame(fnLet, fnNum, fileNames, stringsAsFactors=FALSE);
fnPieces

## partial sort by numbers only (gives new df)
dfPartialSort <- fnPieces[fnNumOrd, ]; dfPartialSort

## find the order of the names, then select from new df with that
fnLetOrd <- order(dfPartialSort[, 1]); fnLetOrd
dfFullSort <- dfPartialSort[fnLetOrd, ]; dfFullSort

## the file names have "gone along for the ride", so pick them off now
sortedFileNames <- dfFullSort$fileNames; sortedFileNames

______________________________________________
R-help@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.

______________________________________________
R-help@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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to