2010-11-22 103 views
5

R中是否有內置函數來對字符向量進行排序? sortorder忽略大小寫:在排序字符串時不要忽略大小寫

tv <- c("a", "A", "ab", "B") 
sort(tv) 
## [1] "a" "A" "ab" "B" 

這是我的解決方案迄今:

CAPS <- grep("^[A-Z]", tv) 
c(sort(tv[CAPS]), sort(tv[-CAPS])) 
## [1] "A" "B" "a" "ab" 

回答

10

post about Auto-completion in Notepad++你可以改變當地的設置:

Sys.setlocale(, "C") 
sort(tv) 
# [1] "A" "B" "a" "ab" 

編輯。我讀了幫助頁面,以Sys.setlocale,似乎改變LC_COLLATE足夠:Sys.setlocale("LC_COLLATE", "C")

你可以把它包裝成一個功能,如果你使用它不止一次:

sortC <- function(...) { 
    a <- Sys.getlocale("LC_COLLATE") 
    on.exit(Sys.setlocale("LC_COLLATE", a)) 
    Sys.setlocale("LC_COLLATE", "C") 
    sort(...) 
} 
+0

我有完全相反的問題,即我的默認的LC_COLLATE是「C」,我想使用不區分大小寫的順序。我沒有找到比嘗試安裝的語言環境更好的東西,並且使用Sys.setlocale(「LC_COLLATE」,「eu_ES.iso88591」)替代了函數的第3行。我相信這是錯誤的。什麼是正確的方法來做到這一點? – 2015-08-25 21:30:57

+0

一個更好的方法是使用'stringr :: str_sort',你可以指定語言環境,以便它有一致的結果。 – dracodoc 2017-11-30 01:13:20