尝试提取状态缩写

时间:2019-06-12 01:58:37

标签: r

我在数据框中有一个地址列表,我想将状态缩写提取到新列中。

我尝试了在另一个问题上看到的一些代码:

df$State <- str_extract(df$Address, "\\b[A-Z]{2}"))

在大多数情况下,它运行良好,但它还返回了诸如“ NW”之类的东西,这是地址的一部分。我也尝试过:

ex_city_state(df$Address)
来自qdapRegex软件包的

似乎有效,但是我不确定如何将结果放入新列。 这是地址的示例:

"212 E Superior St, Alma, MI 48801, USA"
"121 Industrial Rd, Belmont, CA 94002, USA"
"24 Gouverneur Ln, New York, NY 10005, USA"
"1701 Wright St, Madison, WI 53704, USA"
"15898 TX-123, San Marcos, TX 78666, USA"

2 个答案:

答案 0 :(得分:2)

您可以通过查找两个字母的缩写,然后紧随其后的是5位数的邮递区号,例如

addresses <- c("212 E Superior St, Alma, MI 48801, USA",
               "121 Industrial Rd, Belmont, CA 94002, USA",
               "24 Gouverneur Ln, New York, NY 10005, USA",
               "1701 Wright St, Madison, WI 53704, USA",
               "15898 TX-123, San Marcos, TX 78666, USA")
states <- sub(".*\\b([A-Z]{2}) \\d{5}.*", "\\1", addresses)
states

   1    2    3    4    5 
"MI" "CA" "NY" "WI" "TX" 

答案 1 :(得分:0)

ex_city_state返回一个向量列表。要将它们添加到新列中,可以unlist

df$city_state <- unlist(qdapRegex::ex_city_state(df$Address))

或者在R state.abb中有一个内置的字符向量,该向量具有所有状态的缩写。您可以使用它创建一个模式并提取状态

stringr::str_extract(df$Address, paste0(state.abb, collapse = "|"))
#[1] "MI" "CA" "NY" "WI" "TX"

这可以使用sub在基数R中完成

sub(paste0(".*(", paste0(state.abb, collapse = "|"), ").*"), "\\1", df$Address)