【问题标题】:Do not ignore case in sorting character strings排序字符串时不要忽略大小写
【发布时间】:2011-05-13 19:28:27
【问题描述】:

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"

【问题讨论】:

    标签: sorting r vector character


    【解决方案1】:

    post about Auto-completion in 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 包(如@dracodoc 评论):

    stringr::str_sort(tv, locale="C")
    

    我认为这是最好的方法。

    【讨论】:

    • 我遇到了完全相反的问题,即我的默认 LC_COLLATE 是“C”,我想使用不区分大小写的排序。我没有找到比尝试一些已安装的语言环境并用 Sys.setlocale("LC_COLLATE", "eu_ES.iso88591") 替换函数的第 3 行更好的方法。我确定这是错的。这样做的正确方法是什么?
    • 一个更好的方法是使用stringr::str_sort,你可以指定区域设置,这样它就会有一致的结果。
    • @FabioMarroni stringr::str_sort 会忽略当前设置,因此会不区分大小写 (stringr::str_sort(tv))。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多