3

文字ベクトルを自然な順序で並べ替えようとしていますが (人間が並べ替えるように)、大文字と小文字の違いを考慮しています。たとえば、以下のベクトルでは、すべての小さい「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 と同様の機能を実行しても機能しません。

この方法でソートするベクトルがいくつかあり、それらには例に含まれていない文字が含まれているため、これを行う一般的な方法を見つけることは素晴らしいことです.

アイデア?たぶん、私が見逃している明らかな何かがあります。ありがとう。

4

1 に答える 1