2010-05-06 8 views
14

Y a-t-il un natural sort pour R?Comment effectuer un tri naturel?

Dire que j'avais un vecteur de caractère comme ceci:

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

Je voudrais trier aphanumerically, donc je retourner ceci:

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

Est-ce que cela existe quelque part, ou devrais-je commencer à coder?

Répondre

26

Je ne pense pas que "tri alphanumérique" signifie ce que vous pensez que cela signifie.

Dans tous les cas, on dirait que vous voulez 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

Excellent! Le tri alphanumérique n'est-il pas ce bon terme pour cela? Est-ce que je l'ai appelé la mauvaise chose tout le long? – cbare

+1

Le tri alphanumérique aimerait ce qui est retourné par la fonction R sort(). Chaque caractère est évalué en fonction de la valeur ASCII de la position. Les petites valeurs sont triées en premier. Dans ce cas, "abc01" serait avant "abc1" car la valeur ASCII "0" (48) est inférieure à "1" (49) pour la position 4. – beach

+4

J'ai généralement utilisé le terme "tri d'ordre naturel" après un des premiers logiciels largement utilisés pour cela (http://www.naturalordersort.org/). Jeff Atwood a même écrit un article sur ce blog (http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html). –