排序:在连字符前放置空格

4

我希望对一个字符向量进行排序,但是在排序中空格要排在连字符前面。

例如:

c("Want-#3","Want #2","I want to be first") %>% sort()
[1] "I want to be first" "Want-#3"            "Want #2" 

I would want it to have returned

    [1] "I want to be first" "Want #2"            "Want-#3" 

显然,我可以使用sort中的"decreasing"选项,但是如果我想按升序排序,这种方法在包含其他非平凡元素的列表中就不适用了。

1
很奇怪。在我的机器上,它按照你想要的方式进行排序。排序取决于“locale”:你能运行sessionInfo()并展示结果吗?如果你正在使用UTF8,则空格应该出现在“-”之前。 - divibisan
1个回答

2
正如divibisan提到的那样,排序取决于locale,您可以通过运行Sys.getlocale()来检查您的locale。
运行下面的代码将关闭特定于语言环境的排序并产生所需的结果。我不完全确定它是否会影响其他R进程,因此在使用时要小心。
最初的回答:
string1<-c("Want-#3","Want #2","I want to be first")
string1 %>% sort()

old <- Sys.getlocale("LC_COLLATE") #Saving my original locale to an object named "old"

Sys.setlocale("LC_COLLATE", "C") # Turns off locale specific sorting 
string1 %>% sort() # Sorting should now produce desired results

最初的回答是:运行以下命令即可将 R 返回到原始语言环境:
Sys.setlocale("LC_COLLATE", old) 
string1 %>% sort()

1
我做了这个,并且它确实起作用了。然而,我发现这是tidyverse的一部分https://stringr.tidyverse.org/reference/str_order.html。这也可以在不设置locale的情况下工作。基于R语言的底层locale是否与此处使用的locale不同? - RayVelcoro
我认为这取决于操作系统,但如果 string1 %>% sort() 产生不同的结果,则 str_sort(string1) 必须使用不同的区域设置。有点奇怪,因为 str_sort() 的默认值是 locale= "en",而我的默认区域设置由 Sys.getlocale 返回的是 "English_United States.1252."。但我想这些并不等价。 - M.Bergen

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