我在数据框中有一个地址列表,我想将状态缩写提取到新列中。
我尝试了在另一个问题上看到的一些代码:
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"
答案 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)