大写基本方向,R 中的其他所有内容都使用标题大写

Upper case cardinal directions, use title case for everything else in R

我有一长串全部大写的地址。我想转换为标题大小写,但保留主要方向的大写字母,例如东北、西北、东南、西南。

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

# this returns 
14615 Se Creekside Drive

# desired result
14615 SE Creekside Drive

您可以先转换为首字母大写,然后再将主要方向转换回大写。例如:

address = stringr::str_to_title(address)

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

尝试:

> 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,})匹配两个以上的单词字符

使用 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"

reprex package (v0.2.0) 创建于 2018-06-26。