这是一个小的data.frame
:
e = data.frame(A=c(letters[1:5], 1:5))
关于执行以下命令时发生的事情,我有些困惑:
unclass(e$A) %>% as.numeric()
我得到以下输出:
[1] 6 7 8 9 10 1 2 3 4 5
为什么将
a:e
视为6:10
? 最佳答案
您的问题提出了一个深埋在每种计算机语言内心的问题。这是如何订购字符的问题。
R帮助文件?sort
表示:
字符向量的排序顺序取决于排序规则
使用的语言环境的顺序:请参阅比较。的排序顺序
因素是其水平的顺序
因此,您可以尝试找到您的语言环境。您还想检查定义国际字符串排序和比较规则的ISO 14651标准。
根据您所在的位置,您可能会发现订购特殊字符的区别,但关于数字,我想它们始终是第一位的。
"a">"1"
#### [1] TRUE
"a">"A"
#### [1] FALSE
编辑:
关于大写字母和小写字母之间的字母优先顺序,确实取决于您的系统语言环境(英语遵循
us_en
,非英语语言环境可以遵循ASCII
或其他语言,请参见wikipedia paragraph)。试试这个:Sys.setlocale("LC_COLLATE", "C")
sort(c(1,2,3,"a", "b", "c", "A", "B", "C"))
#### [1] "1" "2" "3" "A" "B" "C" "a" "b" "c"
Sys.setlocale("LC_COLLATE", "French_France.1252")
sort(c(1,2,3,"a", "b", "c", "A", "B", "C"))
#### [1] "1" "2" "3" "a" "A" "b" "B" "c" "C"
在其他So question中实际上已经讨论了类似的问题