[R] ordering in list.files

Marc Schwartz marc_schwartz at comcast.net
Fri May 18 17:21:25 CEST 2007

On Fri, 2007-05-18 at 20:16 +0530, Shubha Vishwanath Karanth wrote:
> Hi R,

> My csv files are stored in the order, '1abc.csv', '2def.csv',
> '3ghi.csv', '10files.csv' in a folder. When I read this into R from
> list.files (R command: x=list.files("Z:/CSV/fold",full.names=F), I don't
> get the same order, instead I get the order as "10files.csv" "1abc.csv"
> "2def.csv"    "3ghi.csv". But I don't want this ordering. So, how do I
> maintain the oder which I have in my physical folder?

> Thanks in advance
> Shubha

>From ?list.files in the Value section:

"The files are sorted in alphabetical order, on the full path if
full.names = TRUE."

Presumably you are on Windows and you have the folder view set to sort
the files in some order, possibly by the date/time of creation?  Check
the folder settings to see how you have this set.

In R the list of files is sorted in alpha order and in this case, the
numbers are sorted based upon the order of the ASCII values of the
numeric characters, not in numeric value order.

You can try this approach using a regex and sub() to get the numeric
value parts of the file names, get the ordered indices and then pass
them back to the vector of file names:

> Files
[1] "10files.csv" "1abc.csv"    "2def.csv"    "3ghi.csv"   

> Files[order(as.numeric(sub("([0-9]*).*", "\\1", Files)))]
[1] "1abc.csv"    "2def.csv"    "3ghi.csv"    "10files.csv"

See ?sub, ?regex and ?order for more information.


Marc Schwartz

More information about the R-help mailing list