不要在对字符排序时忽略大小写

12

在R中是否有内置的功能可以按照大小写排序字符向量?sortorder忽略大小写:


tv <- c("a", "A", "ab", "B")
sort(tv)
## [1] "a"  "A"  "ab" "B" 

这是我迄今为止的解决方案:

CAPS <- grep("^[A-Z]", tv)
c(sort(tv[CAPS]), sort(tv[-CAPS]))
## [1] "A"  "B"  "a"  "ab"
1个回答

16

Notepad++自动完成文章之后,您可以更改本地设置:

Sys.setlocale(, "C")
sort(tv)
# [1] "A"  "B"  "a"  "ab"

编辑。我阅读了有关Sys.setlocale的帮助页面,似乎更改LC_COLLATE就足够了:Sys.setlocale("LC_COLLATE", "C")

要临时更改排序的排序规则,您可以使用withr包:

withr::with_collate("C", sort(tv))

你可能认为可以使用stringr::str_sort和它的locale参数来完成类似的操作,但是这并不起作用(tidyverse/stringr#440)。

我遇到了完全相反的问题,即我的默认LC_COLLATE是“C”,而我想使用不区分大小写的排序。我没有找到比尝试一些已安装的语言环境更好的方法,然后用Sys.setlocale("LC_COLLATE", "eu_ES.iso88591")替换函数的第三行。我确定这是错误的。正确的做法是什么? - Fabio Marroni
更好的方法是使用 stringr::str_sort,您可以分配语言环境,以便它具有一致的结果。 - dracodoc
@FabioMarroni stringr::str_sort 忽略当前设置,因此它将不区分大小写地排序 (stringr::str_sort(tv)). - Marek

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