提问人:cbare 提问时间:5/6/2010 最后编辑:Gregor Thomascbare 更新时间:12/14/2020 访问量:14823
如何在 R 中执行自然(词典)排序?[复制]
How to perform natural (lexicographic) sorting in R? [duplicate]
问:
R 有自然排序吗?
假设我有一个这样的字符向量:
seq.names <- c('abc21', 'abc2', 'abc1', 'abc01', 'abc4', 'abc201', '1b', '1a')
我想以数字方式对它进行排序,所以我得到了这个:
c('1a', '1b', 'abc1', 'abc01', 'abc2', 'abc4', 'abc21', 'abc201')
这是否存在于某个地方,或者我应该开始编码?
答:
48赞
Nicholas Riley
5/6/2010
#1
我不认为“字母数字排序”意味着你认为它的含义。
无论如何,看起来你想要 mixedsort,是 gtools 的一部分。
> 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赞
cbare
5/6/2010
非常好!字母数字排序不是这个正确的术语吗?我一直说它是错误的吗?
1赞
beach
5/6/2010
字母数字排序希望从 R sort() 函数返回的内容。每个字符都根据位置的 ASCII 值进行评估。首先对较小的值进行排序。在本例中,“abc01”位于“abc1”之前,因为位置 4 的 ASCII 值“0”(48)小于“1”(49)。
6赞
Nicholas Riley
5/6/2010
我通常使用术语“自然顺序排序”,这是最早广泛使用的软件之一(naturalordersort.org)。杰夫·阿特伍德(Jeff Atwood)甚至写了一篇关于它的博客文章(codinghorror.com/blog/2007/12/...
17赞
lotus
2/29/2020
#2
自然排序在 / 包中可用,函数为 /。字母数字排序和自然排序之间的切换由“numeric”参数控制。stringr
stringi
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()
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"
评论