2010-05-06 1 views
14

Есть ли natural sort для R?Как выполнить естественную сортировку?

Скажем, у меня был векторный характер, как так:

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

+1

Буквенно-цифровая сортировка хотела бы получить то, что возвращается из функции R sort(). Каждый символ оценивается на основе значения ASCII позиции. Сначала сортируются меньшие значения. В этом случае «abc01» будет до «abc1», потому что значение ASCII «0» (48) меньше, чем «1» (49) для позиции 4. – beach

+4

Я обычно использовал термин «сортировка естественного порядка» после одного из первых широко используемых частей программного обеспечения для этого (http://www.naturalordersort.org/). Джефф Этвуд даже написал сообщение в блоге об этом (http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html). –