将data.table :: setorder与base :: sort进行比较

时间:2016-10-20 10:09:07

标签: r data.table

我正在尝试对data.table行(R-3.3.1 Win x64& data.table_1.9.6)进行排序,发现setorderbase::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

1 个答案:

答案 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"