Не игнорируйте регистр при сортировке символьных строк - PullRequest
8 голосов
/ 22 ноября 2010

Есть ли в R встроенная функциональность для сортировки векторов символов с учетом регистра?sort и order игнорировать регистр:

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

Это мое решение до сих пор:

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

1 Ответ

12 голосов
/ 22 ноября 2010

После поста об автозаполнении в Блокноте ++ вы можете изменить локальные настройки:

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

РЕДАКТИРОВАТЬ.Я прочитал справочные страницы до Sys.setlocale, и кажется, что достаточно изменить LC_COLLATE: Sys.setlocale("LC_COLLATE", "C")

Чтобы временно изменить параметры сортировки для сортировки, вы можете использовать пакет withr:

withr::with_collate("C", sort(tv))

или используйте пакет stringr (как в комментарии @dracodoc):

stringr::str_sort(tv, locale="C")

Я думаю, что это лучший способ сделать это.

...