如何限制模糊连接只返回一场比赛

sar*_*nes 6 r fuzzy one-to-one string-matching fuzzyjoin

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

例如:将城市奥古斯塔 (Augusta, GA) 与奥古斯塔 (Augusta, GA) 和奥古斯塔 (Augusta, ME) 进行匹配并复制数据。我不想限制最大距离,因为我仍然想允许灵活性,但我不能让我的数据重复。我想找到一种方法来进行部分字符串匹配,但只返回最接近的结果。

我尝试过使用 fuzzyjoin 包,但从我所见,没有办法限制只有一场比赛或只有最佳比赛。我知道在 pmatch 中有一个禁止重复的调用,但我找不到使 pmatch 作为连接工作的方法。

data <- stringdist_left_join(data, orig, ignore_case = TRUE)
Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)

Art*_*Yip 2

如果没有 reprex 很难判断,但一般来说,您可以使用以下方法处理模糊连接结果

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

以获得一个“最佳”结果。

参考:

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

如何匹配两个数据集中的模糊匹配字符串?