2016-10-20 59 views
0

我想排序data.table(R-3.3.1 Win x64 & data.table_1.9.6)的行,發現setorderbase::sort不同。我正確使用setorder嗎?比較data.table :: setorder針對base :: sort

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

我們可以sort重現此,如果我們設置的方法,其在基礎R從data.table的排序採用 「基數」:

sort(dt[["A"]]) 
#[1] "AA" "Ab" "AB" 
sort(dt[["A"]], method = "radix") 
#[1] "AA" "AB" "Ab" 

help("sort")我們發現:

除基本方法 「radix」外,字符向量的排序順序將取決於所用語言環境的排序順序 :請參閱比較。
...

但是,有一些警告與基數排序:如果x是一個字符向量,所有元素必須共享相同的編碼。 僅支持UTF-8(包括ASCII)和Latin-1編碼。 排序總是遵循「C」語言環境。

Sys.setlocale(category = "LC_ALL", locale = "C") 
sort(dt[["A"]]) 
#[1] "AA" "AB" "Ab"