Верхний регистр кардинальных направлений, используйте заглавный регистр для всего остального в R - PullRequest
0 голосов
/ 26 июня 2018

У меня огромный список адресов, которые все в верхнем регистре. Я хотел бы преобразовать в титульный регистр, но сохранить верхний регистр для основных направлений, например NE, NW, SE, SW.

address <- c("14615 SE CREEKSIDE DRIVE")
stringr::str_to_title(address)

# this returns 
14615 Se Creekside Drive

# desired result
14615 SE Creekside Drive

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Попробуйте:

> gsub("\\b([A-Z])(\\w{2,})", "\\1\\L\\2" , "14615 SE CREEKSIDE DRIVE", perl=true)
[1] "14615 SE Creekside Drive"

Распределение регулярных выражений:

  • \b Соответствует границе слова
  • ([A-Z]) Соответствует заглавной букве
  • (\w{2,}) Совпадение более двух символов слова
0 голосов
/ 26 июня 2018

С str_replace вы можете конвертировать обратно кардинальные направления. Пробелы включены, чтобы избежать появления кардиналов в именах, но если они могут быть окружены другими вещами, кроме пробелов, вам придется изменить это.

library(stringr)
addresses <- c("14615 SE CREEKSIDE DRIVE", "14615 NW CREEKSIDE DRIVE", "14615 SE SEASIDE DRIVE", "14615 SE TANWELL DRIVE")

addresses %>%
  str_to_title %>%
  str_replace(" (N|S)(e) ", " \\1E ") %>%
  str_replace(" (N|S)(w) ", " \\1W ")
#> [1] "14615 SE Creekside Drive" "14615 NW Creekside Drive"
#> [3] "14615 SE Seaside Drive"   "14615 SE Tanwell Drive"

Создано в 2018-06-26 пакетом Представ (v0.2.0).

0 голосов
/ 26 июня 2018

Вы можете сначала преобразовать в регистр заголовков, а затем преобразовать основные направления обратно в верхний регистр. Например:

address = stringr::str_to_title(address)

address = gsub("( [NS])([ew] )", "\\1\\U\\2" , address, perl=TRUE)
...