2010-11-22 21 views
5

¿Existe una funcionalidad incorporada en R para ordenar los vectores de caracteres teniendo en cuenta el caso? sort y order ignorar el caso:No ignorar mayúsculas y minúsculas al ordenar cadenas de caracteres

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

Ésta es mi solución hasta el momento:

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

Respuesta

10

Siguiendo post about Auto-completion in Notepad++ que podría cambiar la configuración local:

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

EDITAR. He leído las páginas de ayuda a Sys.setlocale y parece que el cambio de LC_COLLATE es suficiente: Sys.setlocale("LC_COLLATE", "C")

Usted podría envolverlo en una función de si se utiliza más de una vez:

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

que tenía exactamente el problema contrario, es decir, mi el valor predeterminado LC_COLLATE era "C" y yo quería usar el orden insensible a mayúsculas y minúsculas. No encontré nada mejor que probar algunos entornos locales instalados y sustituir la 3ª línea de la función con Sys.setlocale ("LC_COLLATE", "eu_ES.iso88591"). Estoy seguro de que está mal. ¿Cuál es la forma correcta de hacer eso? –

+0

Un mejor método es usar 'stringr :: str_sort' y puede asignar la configuración regional para que tenga un resultado consistente. – dracodoc

Cuestiones relacionadas