2010-05-06 13 views
14

C'è un natural sort per R?Come eseguire l'ordinamento naturale?

dire che ho avuto un carattere vettoriale in questo modo:

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

mi piacerebbe risolvere la aphanumerically, così ho tornare questo:

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

Questo esistere da qualche parte, o dovrei iniziare a scrivere?

risposta

26

Non credo che "ordinamento alfanumerico" significhi ciò che si pensa significhi.

In ogni caso, sembra che tu voglia 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

Eccellente! Questo tipo di ordinamento alfanumerico non è questo giusto? Ho sempre chiamato la cosa sbagliata? – cbare

+1

L'ordinamento alfanumerico vorrebbe che ciò che viene restituito dalla funzione R sort(). Ogni carattere viene valutato in base al valore ASCII della posizione. I valori più piccoli vengono ordinati per primi. In questo caso, "abc01" sarebbe prima di "abc1" perché il valore ASCII "0" (48) è minore di "1" (49) per la posizione 4. – beach

+4

In genere ho usato il termine "ordinamento naturale" dopo uno dei primi pezzi di software ampiamente usati per fare questo (http://www.naturalordersort.org/). Jeff Atwood ha anche scritto un post sul blog (http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html). –

Problemi correlati