r - 按字母顺序排序时,字母 "y"位于 "i"之后

标签 r locale alphabetical-sort

当使用函数sort(x)时,其中x是一个字符,字母“y”跳到中间,就在字母“i”之后:

> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
[21] "u" "v" "w" "x" "y" "z"

> sort(letters)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "y" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[21] "t" "u" "v" "w" "x" "z"

原因可能是我位于立陶宛,这是“类似立陶宛语”的字母排序,但我需要正常排序。如何在 R 代码中将排序方法更改回正常?

我在 Win7 上使用 R 2.15.2。

最佳答案

您需要更改 R 运行的区域设置。要么对整个 Windows 安装执行此操作(这似乎不是最佳),要么在 R session 中通过以下方式执行此操作:

Sys.setlocale("LC_COLLATE", "C")

您可以使用任何其他有效的区域设置字符串来代替“C”,但这应该会让您回到所需的字母排序顺序。

阅读?locales了解更多信息。

我认为值得注意的是姊妹函数 Sys.getlocale(),它查询区域设置参数的当前设置。因此你可以这样做

(locCol <- Sys.getlocale("LC_COLLATE"))
Sys.setlocale("LC_COLLATE", "lt_LT")
sort(letters)
Sys.setlocale("LC_COLLATE", locCol)
sort(letters)
Sys.getlocale("LC_COLLATE")

## giving:
> (locCol <- Sys.getlocale("LC_COLLATE"))
[1] "en_GB.UTF-8"
> Sys.setlocale("LC_COLLATE", "lt_LT")
[1] "lt_LT"
> sort(letters)
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "y" "j" "k" "l" "m" "n"
[16] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "z"
> Sys.setlocale("LC_COLLATE", locCol)
[1] "en_GB.UTF-8"
> sort(letters)
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o"
[16] "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
> Sys.getlocale("LC_COLLATE")
[1] "en_GB.UTF-8"

这当然是@Hadley's Answer 所显示的with_collat​​e() 在安装devtools 后会更简洁地执行的操作。

关于r - 按字母顺序排序时,字母 "y"位于 "i"之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458314/

相关文章:

linux - 在 WINE 中更改语言环境

C++/Win32 查找所有键盘输入语言?

react-native - 如何更改后退按钮标签,react-navigation

java - 按字母排列排序

c - 按字母顺序排序 c 中的列表

r - 使用 ggplot2 自定义森林图。不能有多个组,CI越过下限

r - 用于列表中大量数据的面网格

r - 在 R 中按名称和日期添加唯一 ID

代码仅返回按字母顺序排列的第一个字母,但不返回其余字母

r - 在 ggplot2 中执行 geom_hline 时选择最新的数据集