如何进行自然分类?

时间:2010-05-06 02:18:48

标签: r sorting natural-sort r-faq

R是否有natural sort

说我有这样的角色矢量:

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

我想以不公平的方式对其进行排序,所以我回过头来看看:

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

这是否存在于某个地方,还是应该开始编码?

2 个答案:

答案 0 :(得分:33)

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

无论如何,看起来你想要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"

答案 1 :(得分:8)

具有功能stringr / stringi的{​​{1}} / str_sort()软件包中提供自然排序。字母数字和自然排序之间的切换由“数字”参数控制。

stri_sort()

伴随函数library(stringr) # library(stringi) str_sort(seq.names, numeric = TRUE) # stri_sort(seq.names, numeric = TRUE) [1] "1a" "1b" "abc1" "abc01" "abc2" "abc4" "abc21" "abc201" / str_order()返回索引,以默认方式将向量按升序排列:

stri_order()