在R中按ASCII顺序排序非字母数字字符

3

有什么办法可以按照ASCII顺序(如C语言)对包含非字母数字字符的字符向量进行排序吗?以下是一个示例:

> v<-c("#1-adfgh3$","-d","!cd3&")
> sort(v)
[1] "-d"         "!cd3&"      "#1-adfgh3$"

在ASCII码中,“!”应该在“-”之前。

非常感谢。

祝好, 约翰


1
如果你仔细阅读?sort,你会看到底部有一个链接,指向一些关于R中排序问题的讨论,这可能会对该问题有所启示。 - joran
1个回答

6

这是一个想法:

asciiSort <- function(vec) {
    x <- sapply(vec, 
                function(X) {
                    paste0(strtoi(charToRaw(X), base=16), collapse="")
                })
    vec[order(x)]
}

asciiSort(v)
# [1] "!cd3&"      "#1-adfgh3$" "-d"    

3
运行Sys.setlocale("LC_COLLATE", "C")对我似乎也起作用了,但我不确定其可靠性如何。 - joran
1
@joran -- 对我来说,这似乎更可取,但我也不知道它是多么通用/可移植的解决方案。(我认为一旦你开始传递非ASCII字符给我的函数,所有的赌注都是无效的。) - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接