R 和 Python 有不同的字符排序顺序

Ste*_*eve 4 sorting ascii r dataframe

我正在尝试对 R 中的数据帧进行排序,发现排序顺序与预期的 ascii 排序顺序不匹配。我需要以与 Python 对数据排序相同的方式对 R 中的数据帧进行排序。

df = df[do.call(order, df), ]  # sort by all columns
Run Code Online (Sandbox Code Playgroud)

如此处所示,Python 将大写字母排在小写字母之前:

$ python
Python 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:53)
>>> "A" < "a"
True
Run Code Online (Sandbox Code Playgroud)

但 R 将大写字母排在小写字母之后:

$ R
R version 3.2.0 (2015-04-16) -- "Full of Ingredients"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)
  Natural language support but running in an English locale
> "A" < "a"
[1] FALSE
> "A" > "a"
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如何更改 R 排序行为以匹配标准 ASCII 排序?order 函数是否有一些参数,或者是否有一些配置设置来更改排序顺序?

注意:这不是区分大小写和不区分大小写的排序 - 比这更糟糕 - 区分大小写的排序具有非标准顺序。

Ben*_*ker 7

不同的语言环境使用不同的排序顺序,包括大小写规则:您可能想要使用Sys.setlocale(locale = "C"). (这里有关于区域设置定义和大小写排序顺序的更多信息。)

\n

?比较说明了一些关于特定于区域设置的排序......

\n
\n

区域设置(例如 \xe2\x80\x98en_US\xe2\x80\x99)的整理顺序通常与 \xe2\x80\x98C\xe2\x80\x99(应使用 ASCII)\n不同,并且可能\n令人惊讶。

\n
\n

...但据我所知,没有明确说明案例顺序(在页面中搜索“案例”没有得到任何命中)。

\n
> Sys.getlocale()\n[1] "en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8"\n> "A" < "a"\n[1] FALSE\n> Sys.setlocale(locale = "C")\n[1] "C/C/C/C/C/en_CA.UTF-8"\n> "A" < "a"\n[1] TRUE\n
Run Code Online (Sandbox Code Playgroud)\n