我正在尝试用R语言创建一个程序,将城市名称或机场名称替换为三位数的机场代码。我希望进行模糊匹配,以获得更大的灵活性,因为我要替换的城市/机场名称的数据来自许多不同的来源。我的问题是,在模糊匹配左连接的情况下,我似乎找不到一种方法,只将最接近的匹配从右表(代码)带回左表(名称)。
例如: GA的奥古斯塔与GA的奥古斯塔和ME的奥古斯塔都进行了匹配,并复制了数据。我不想限制最大距离,因为我仍然希望允许灵活性,但我不能让我的数据被复制。我想找到一种方法来进行部分字符串匹配,但只返回最接近的结果。
我尝试过使用fuzzyjoin包,但从我所看到的情况来看,没有办法限制只有一个匹配或只有最佳匹配。我知道在pmatch中有一个禁止重复的调用,但我找不到一种方法来使pmatch作为连接工作。
data <- stringdist_left_join(data, orig, ignore_case = TRUE)
这是我正在使用的代码,字符串是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
发布于 2020-10-20 06:56:31
在没有reprex的情况下很难判断,但一般来说,您可以使用以下命令处理fuzzyjoin结果
%>% group_by(column_you_joined_by) %>% slice_min(dist)
得到一个“最好”的结果。
参考文献:
https://stackoverflow.com/questions/57909676
复制