2010-05-06 54 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