r - 拼出街道名称的方向
问题描述
我尝试使用 stringr 包更正数据框的街道名称,拼写为“S”。到“南”或“E”到“东”以及“圣”。到“街”。样本数据如下。
df = data.frame(street = c('333 S. HOPE STREET', '21 South Hope Street', '54 Hope PKWY', '60C/O St.'))
这是我的代码。
df2 <- df %>% mutate(street2 = str_replace(street, 'S', "South"),
street2 = str_replace_all(street2, 'PKWY', "PARKWAY"),
street2 = str_replace_all(street2, 'st.', "Street"))
它返回到以下结果。
street street2
333 S. HOPE STREET 333 South. HOPE STREET
21 South Hope Street 21 Southouth Hope Street
54 Hope PKWY 54 Hope PARKWAY
60C/O St. 60C/O Southt.
这是我想要的结果。不知道我哪里错了。
street street2
333 S. HOPE STREET 333 South HOPE STREET
21 South Hope Street 21 South Hope Street
54 Hope PKWY 54 Hope PARKWAY
60C/O St. 60C/O Sreet.
解决方案
不要忘记逃避这些点!在正则表达式模式中,.
匹配(几乎)任何字符。如果你的意思是一个字面点,你必须用 a 转义这个点\
(你也必须用 another 转义\
)。
所以:
df %>% mutate(street2 = str_replace(street, 'S\\.', "South"),
street2 = str_replace_all(street2, 'PKWY', "PARKWAY"),
street2 = str_replace_all(street2, 'St\\.', "Street"))
将导致
# street street2
# 1 333 S. HOPE STREET 333 South HOPE STREET
# 2 21 South Hope Street 21 South Hope Street
# 3 54 Hope PKWY 54 Hope PARKWAY
# 4 60C/O St. 60C/O Street
为了获得更好的可读性,您可以使用stringr::str_to_title
df %>% mutate(street2 = str_replace(street, 'S\\.', "South"),
street2 = str_replace_all(street2, 'PKWY', "PARKWAY"),
street2 = str_replace_all(street2, 'St\\.', "Street") ) %>%
mutate_all( ., str_to_title )
# street street2
# 1 333 S. Hope Street 333 South Hope Street
# 2 21 South Hope Street 21 South Hope Street
# 3 54 Hope Pkwy 54 Hope Parkway
# 4 60c/O St. 60c/O Street
推荐阅读
- python - 无法在 Raspi 4 中的 Pycharm 中打开终端,当前解决方案卡在 'gcc -fPIC -c*.c
- c# - 在 C# 中连接到 Exchange Web 服务 (EWS) 后出现错误
- sorting - 给定一个排序数组,是否可以在不知道重复元素的情况下在 O(log n) 时间内找到重复元素的边界?
- java - 线程“主”java.lang.NoSuchMethodError 中的异常?
- kotlin - mockk,刚刚运行的是什么
- stackexchange-api - 如何使用 StackExchange API 从用户个人资料页面获取“top x% this y”?
- python - 如何将图例分成两列?
- azure - 复制 Azure OSDisks V DataDisks 和 powershell 将 Lun 设置为 0
- scala - 使用 scala 格式,如何从 playframework 中排除视图文件
- c# - 有 DateTime 运算符 + (DateTime d, TimeSpan t),但没有 DateTime 运算符 + (TimeSpan t, DateTime d)