我正在尝试对data.table
行(R-3.3.1 Win x64& data.table_1.9.6)进行排序,发现setorder
与base::sort
不同。我正确使用setorder吗?
dt <- data.table(A=c("AA","AB","Ab"))
setorder(dt, A)
identical(dt[,A], sort(dt[["A"]]))
#[1] FALSE
df <- data.frame(A=c("AA","AB","Ab"))
identical(df[order(df$A),"A"], sort(df[["A"]]))
#[1] TRUE
答案 0 :(得分:2)
如果我们将方法设置为&#34; radix&#34;我们可以使用sort
重现这一点。这是在data.table的排序基础R中采用的:
sort(dt[["A"]])
#[1] "AA" "Ab" "AB"
sort(dt[["A"]], method = "radix")
#[1] "AA" "AB" "Ab"
在help("sort")
我们找到:
除方法外 &#34; radix&#34;,字符向量的排序顺序取决于 使用区域设置的整理顺序:参见比较 ...
但是,基数排序有一些注意事项:如果x是字符向量,则所有元素必须共享相同的编码。 仅支持UTF-8(包括ASCII)和Latin-1编码。 整理始终遵循&#34; C&#34;区域设置。
Sys.setlocale(category = "LC_ALL", locale = "C")
sort(dt[["A"]])
#[1] "AA" "AB" "Ab"