如何在 R 中准确检测字符向量中的城市名称?

问题描述 投票:0回答:1

我有一个名称字符向量,想要准确识别每个元素是否包含城市名称。为了实现这一点,我最初使用了下面的代码:

 name <- c( "Business Applications for New York" ,"Proprietors' Farm Income in New York" ,"Farm Business (Included in Nonfinancial Corporate and Noncorporate Business Sectors); Nonresidential Structures, Current Cost Basis, Transactions")
library(maps)
city=c()
for (j in 1:length(name)) {
     testresult=c()
     for (i in 1:length(us.cities$name)) {
         testresult[i] = agrepl(us.cities$name[i], name[j], max.distance=3, ignore.case=TRUE,fixed = T)
       }
     if (sum(testresult>0)) {
         city[j]=1
       } else{
           city[j]=0 }
}
city

但是,此代码错误地得出结论:名称向量中的所有元素都包含城市名称。有没有更好的方法来准确检测 R 中字符向量的每个元素中的城市名称?您的见解和代码示例将不胜感激。谢谢!

r string maps character
1个回答
0
投票

这种情况下的一种方法可能是利用固有的

state.abb
(其中包含州缩写),并使用
map
us.cities$name
gsub
的数据集
paste(..., collapse = "|")
中删除这些缩写。然后使用
grepl
查看是否有匹配项:

cities_only <- trimws(gsub(paste(state.abb, collapse = "|"), "", us.cities$name))

# See comparison:

   head(us.cities$name)
   # [1] "Abilene TX" "Akron OH"   "Alameda CA" "Albany GA"  "Albany NY"  "Albany OR" 

   head(cities_only)
   # [1] "Abilene" "Akron"   "Alameda" "Albany"  "Albany"  "Albany" 

grepl(paste0(cities_only, collapse = "|"), name)
# [1]  TRUE  TRUE FALSE

(注意

trimws
修剪与此
gsub
相关的空白)

© www.soinside.com 2019 - 2024. All rights reserved.