如何解决使用R和正则表达式在地址字符串中仅保留所需的逗号
我想将地址字符串列表分为两列,在城市和州之间进行划分。
例如,说我有两个地址字符串:
addr1
addr2
我将如何在R中使用正则表达式删除Lot 10和Fairfax之间的“意外”逗号,以便在任何给定地址字符串中剩余的唯一逗号是分隔城市和州的逗号?
我想要的结果是一个数据帧,其中地址字符串在上述逗号处分为两列:
解决方法
假设您只想在最终状态和邮政编码之前分割地址,则可以如下使用sub
:
df$X1 <- sub(",[A-Z]{2} \\d{5}$","",df$address)
df$X2 <- sub("^.*([A-Z]{2} \\d{5})$","\\1",df$address)
df
X1 X2
1 123 ABC street Lot 10,Fairfax VA 22033
2 123 ABC street Fairfax VA 22033
数据:
df <- data.frame(address=c("123 ABC street Lot 10,Fairfax,VA 22033","123 ABC street Fairfax,VA 22033"),stringsAsFactors=FALSE)
,
有两种方法可以扩展蒂姆的答案:
- Zip+4邮政编码(仅限美国?);和
- 非2字母的“状态” ...实际上,只是在寻找单词边界,而不是硬编码“ 2个字母”(不确定是否/何时是这个因素...是否有人写了非2字母状态?)
addresses <- c("123 ABC street Lot 10,VA 22033")
sub("\\b[[:alpha:]]+\\s+[[:digit:]]{5}(-[[:digit:]]{4})?$",addresses)
# [1] "123 ABC street Lot 10," "123 ABC street Fairfax,"
sub(".*(\\b[[:alpha:]]+\\s+[[:digit:]]{5}(-[[:digit:]]{4})?$)",addresses)
# [1] "VA 22033" "VA 22033"
我们可以分别删除逗号(gsub(",",...)
和空白(trimws(...)
)。
out <- data.frame(
X1 = sub("\\b[[:alpha:]]+\\s+[[:digit:]]{5}(-[[:digit:]]{4})?$",addresses),X2 = sub(".*(\\b[[:alpha:]]+\\s+[[:digit:]]{5}(-[[:digit:]]{4})?$)",addresses)
)
out[] <- lapply(out,function(x) trimws(gsub(",x)))
out
# X1 X2
# 1 123 ABC street Lot 10 Fairfax VA 22033
# 2 123 ABC street Fairfax VA 22033
(尽管有人可能会主张更小心地删除逗号。耸肩)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。