我正在尝试使用agrep函数基于公司名称模糊匹配两个不同的数据帧。为了改善我的匹配,我想只匹配公司,如果他们位于同一个国家。
df1: df2:
Company ISO Company ISO
Aalberts Industries NL Aalberts NL
Allison NL Allison transmission NL
Allison UK Allison transmission UK
我使用以下函数来匹配:
testb$test <- ""
for(i in 1:dim(testb)[1]) {x2 <- agrep(testb$name[i], testa$name, ignore.case=TRUE, value=TRUE, max.distance = Inf, useBytes = TRUE, fixed = TRUE)
x2 <- paste0(x2,"")
testb$test2[i] <- x2
}
我可以为每个国家/地区创建一个子集,而不是匹配每个子集,但这很有用。如果df1 $ ISO = df2 $ ISO,还有另一种让R只匹配公司名称的方法吗?谢谢!
答案 0 :(得分:1)
尝试使用data.table
包进行索引:https://www.r-bloggers.com/intro-to-the-data-table-package/。
您的公司专栏似乎与agrep()
一致且准确无误地匹配。例如,只有当您将max.distance
设置为大于10的值时,“Aalberts Industries”才会匹配“Aalberts”。相同的字符串距离也会报告“代数”和“Alleyway”之间的匹配 - 不是非常接近所有。我建议在匹配之前清除公司列中不必要的单词。
抱歉,我会将此作为评论,但我没有所需的声誉。也许有人可以将此转换为对我的评论?