文字ベクトルを自然な順序で並べ替えようとしていますが (人間が並べ替えるように)、大文字と小文字の違いを考慮しています。たとえば、以下のベクトルでは、すべての小さい「m」と大きい「M」を個別にソートしたいと考えています。
x<- c("m10", "M10", "m11", "m12", "m2", "M2", "m3", "M3", "m4", "M4", "yo1", "yo2")
次のようになります。
DesiredSort(x)
[1] "M2" "M3" "M4" "M10" "m2" "m3" "m4" "m10" "m11" "m12" "yo1" "yo2"
ここからsort
、ケースを考慮に入れる方法を得ました:
sortC <- function(...) {
a <- Sys.getlocale("LC_COLLATE")
on.exit(Sys.setlocale("LC_COLLATE", a))
Sys.setlocale("LC_COLLATE", "C")
sort(...)
}
sortC(x)
[1] "M10" "M2" "M3" "M4" "m10" "m11" "m12" "m2" "m3" "m4" "yo1" "yo2"
しかし、それは自然な秩序を与えません。私mixedsort
は gtools が m2 を m10 の前に適切に配置することを知っているので、次のようになります。
mixedsort(x)
[1] "m2" "M2" "m3" "M3" "m4" "M4" "m10" "M10" "m11" "m12" "yo1" "yo2"
ただしmixedsort
、文字列の大文字と小文字を明確に無視するため、SortC と同様の機能を実行しても機能しません。
この方法でソートするベクトルがいくつかあり、それらには例に含まれていない文字が含まれているため、これを行う一般的な方法を見つけることは素晴らしいことです.
アイデア?たぶん、私が見逃している明らかな何かがあります。ありがとう。