如何在R中执行自然(词典)排序?
是否有一个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()。字母数字和自然排序之间的切换由“
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"