2010-05-06 55 views
14

R有没有natural sort如何执行自然排序?

说我有一个特征向量,像这样:

seq.names <- c('abc21', 'abc2', 'abc1', 'abc01', 'abc4', 'abc201', '1b', '1a') 

我想aphanumerically排序,所以我回来的:

c('1a', '1b', 'abc1', 'abc01', 'abc2', 'abc4', 'abc21', 'abc201') 

这是否存在某个地方,或者我应该开始编码?

回答

26

我不认为“字母数字排序”意味着你的想法。

在任何情况下,看起来像你想mixedsort

> install.packages('gtools') 
[...] 
> require('gtools') 
Loading required package: gtools 
> n 
[1] "abc21" "abc2" "abc1" "abc01" "abc4" "abc201" "1b"  "1a"  
> mixedsort(n) 
[1] "1a"  "1b"  "abc1" "abc01" "abc2" "abc4" "abc21" "abc201" 
+0

非常好!字母数字排序不是这个正确的术语吗?我一直把它称为错误的东西吗? – cbare 2010-05-06 02:35:25

+1

字母数字排序就像从R sort()函数返回的那样。每个字符都根据位置的ASCII值进行评估。较小的值先排序。在这种情况下,“abc01”会在“abc1”之前,因为对于位置4,ASCII值“0”(48)小于“1”(49)。 – beach 2010-05-06 02:53:20

+4

我一般在一个之后使用了“自然顺序排序”第一个被广泛使用的软件做到这一点(http://www.naturalordersort.org/)。 Jeff Atwood甚至写了一篇关于它的博客文章(http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html)。 – 2010-05-06 02:59:28