2010-11-22 18 views
5

大文字小文字を考慮して文字ベクトルを並べ替えるための組み込み機能はありますか? sortorderケースを無視:文字列をソートする際に大文字小文字を無視しないでください

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

は、これはこれまでのところ私のソリューションです:

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

EDIT:

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にヘルプページを読んで、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行目を置き換えてみると、何も見つかりませんでした。それは間違っていると確信しています。それを行う正しい方法は何ですか? –

+0

もっと良い方法は 'stringr :: str_sort'を使うことです。ロケールを割り当てることで一貫した結果が得られます。 – dracodoc

関連する問題