如何限制模糊连接仅返回一个匹配项

时间:2019-09-12 15:07:35

标签: r string-matching one-to-one fuzzy fuzzyjoin

我正在尝试在R中创建一个程序,以用三位数的机场代码替换城市名称或机场名称。我想进行模糊匹配,以提供更大的灵活性,因为我要替换的具有城市/机场名称的数据来自许多不同的来源。我的问题是,通过左匹配模糊匹配,我似乎无法找到一种方法,只能从右表(代码)中恢复最接近左表(名称)的匹配。

例如:乔治亚州奥古斯塔市与乔治亚州奥古斯塔市和密苏里州奥古斯塔市均匹配,并复制了数据。我不想限制最大距离,因为我仍然想允许灵活性,但是我无法复制数据。我想找到一种方法来进行部分字符串匹配,但只返回最接近的结果。

我已经尝试使用Fuzzyjoin包,但是从我看到的结果来看,没有办法只限制一个匹配或最好的匹配。我知道在pmatch中有一个禁止重复的调用,但是我找不到让pmatch作为联接工作的方法。

data <- stringdist_left_join(data, orig, ignore_case = TRUE)

这是我正在使用的代码,stringdist是R中Fuzzyjoin包的函数。数据集“ data”具有城市名称,航班数量和其他乘客信息。 “原始”数据集包含一列城市/机场名称和机场代码

SAMPLE INPUT
**data table:**
City Name       Passenger Name    Fare Paid
Augusta, GA         Jon            $100
Dallas, TX          Jane           $200
Spokane, WA         Chris          $300

**orig table:**
City Name      Code
Augusta, GA    JCL
Dallas, TX     DAL
Denver, CO     DEN
Seattle, WA    SEA
Spokane, WA    GEG
Austin, TX     AUS
Augusta, ME    PEA
Portland, ME   MEW
Portland, OR   PDX



Desired Result
City Name       Passenger Name    Fare Paid   Code
Augusta, GA         Jon            $100        JCL

1 个答案:

答案 0 :(得分:0)

没有reprex很难说,但是通常,您可以使用以下方式处理模糊连接结果

%>% group_by(column_you_joined_by) %>% slice_min(dist)

获得一个“最佳”结果。

参考:

https://github.com/dgrtwo/fuzzyjoin/issues/18

How can I match fuzzy match strings from two datasets?