Is there a builtin functionality in R to sort character vectors taking case into account? sort
and order
ignore the case:
tv <- c("a", "A", "ab", "B")
sort(tv)
## [1] "a" "A" "ab" "B"
This is my solution so far:
CAPS <- grep("^[A-Z]", tv)
c(sort(tv[CAPS]), sort(tv[-CAPS]))
## [1] "A" "B" "a" "ab"
Following post about Auto-completion in Notepad++ you could change local settings:
Sys.setlocale(, "C")
sort(tv)
# [1] "A" "B" "a" "ab"
EDIT. I read help pages to Sys.setlocale
and it seems that changing LC_COLLATE
is sufficient: Sys.setlocale("LC_COLLATE", "C")
To temporally change collate for sorting you could use withr
package:
withr::with_collate("C", sort(tv))
or use stringr
package (as in @dracodoc comment):
stringr::str_sort(tv, locale="C")
I think this is the best way to do it.