如何在R中执行自然(词典)排序?

如何在R中执行自然(词典)排序?,r,sorting,natural-sort,r-faq,R,Sorting,Natural Sort,R Faq,是否有一个R 假设我有一个这样的字符向量: seq.names <- c('abc21', 'abc2', 'abc1', 'abc01', 'abc4', 'abc201', '1b', '1a') 这是否存在于某个地方,或者我应该开始编码吗?我不认为“字母数字排序”的含义与您认为的相同 在任何情况下,看起来您需要混合排序,这是它的一部分 自然排序在stringr/stringi软件包中可用,其功能为str\u sort()/stri\u sort()。字母数字和自然排序之间的切换由“

是否有一个R

假设我有一个这样的字符向量:

seq.names <- c('abc21', 'abc2', 'abc1', 'abc01', 'abc4', 'abc201', '1b', '1a')
这是否存在于某个地方,或者我应该开始编码吗?

我不认为“字母数字排序”的含义与您认为的相同

在任何情况下,看起来您需要混合排序,这是它的一部分


自然排序在
stringr
/
stringi
软件包中可用,其功能为
str\u sort()
/
stri\u 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()
返回索引,以(默认情况下)升序排列向量:

str_order(seq.names, numeric = TRUE)
# stri_order(seq.names, numeric = TRUE)

[1] 8 7 3 4 2 5 1 6

seq.names[str_order(seq.names, numeric = TRUE)]

[1] "1a"     "1b"     "abc1"   "abc01"  "abc2"   "abc4"   "abc21"  "abc201"

杰出的字母数字排序这个词对这个词不合适吗?一直以来我都把它称为错误的东西吗?字母数字排序希望从R sort()函数返回的内容是这样的。根据位置的ASCII值计算每个字符。较小的值首先排序。在本例中,“abc01”将位于“abc1”之前,因为ASCII值“0”(48)小于位置4的“1”(49)。我通常在最早广泛使用的软件之一之后使用“自然顺序排序”(natural order 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(seq.names, numeric = TRUE)
# stri_order(seq.names, numeric = TRUE)

[1] 8 7 3 4 2 5 1 6

seq.names[str_order(seq.names, numeric = TRUE)]

[1] "1a"     "1b"     "abc1"   "abc01"  "abc2"   "abc4"   "abc21"  "abc201"