亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何匹配兩個數據集中的模糊匹配字符串?

如何匹配兩個數據集中的模糊匹配字符串?

收到一只叮咚 2019-11-29 14:35:29
我一直在研究一種基于不完善的字符串(例如公司名稱)來聯接兩個數據集的方法。過去,我必須匹配兩個非常臟的列表,一個列表包含名稱和財務信息,另一個列表包含名稱和地址。都沒有唯一的ID可以匹配!假設已經應用了清潔,并且可能存在打字和插入錯誤。到目前為止,AGREP是我發現最有效的工具。我可以在AGREP包中使用levenshtein距離,該距離用于測量兩個字符串之間的刪除,插入和替換的數量。AGREP將返回距離最小(最相似)的字符串。但是,我一直無法將命令從單個值轉換為將其應用于整個數據幀。我已經粗略地使用了for循環來重復AGREP函數,但是總有一種更簡單的方法。請參見以下代碼:a<-data.frame(name=c('Ace Co','Bayes', 'asd', 'Bcy', 'Baes', 'Bays'),price=c(10,13,2,1,15,1))b<-data.frame(name=c('Ace Co.','Bayes Inc.','asdf'),qty=c(9,99,10))for (i in 1:6){    a$x[i] = agrep(a$name[i], b$name, value = TRUE, max = list(del = 0.2, ins = 0.3, sub = 0.4))    a$Y[i] = agrep(a$name[i], b$name, value = FALSE, max = list(del = 0.2, ins = 0.3, sub = 0.4))}
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

這是使用該fuzzyjoin包裝的解決方案。它使用類似dplyr語法,并stringdist作為模糊匹配的可能類型之一。


如C8H10N4O2 所建議,stringdistmethod =“ jw”為您的示例創建最佳匹配。


作為建議由dgrtwo,fuzzyjoin的開發商,我用了一個大max_dist,然后使用dplyr::group_by和dplyr::top_n只得到最小距離的最佳匹配。


a <- data.frame(name = c('Ace Co', 'Bayes', 'asd', 'Bcy', 'Baes', 'Bays'),

                price = c(10, 13, 2, 1, 15, 1))

b <- data.frame(name = c('Ace Co.', 'Bayes Inc.', 'asdf'),

                qty = c(9, 99, 10))


library(fuzzyjoin); library(dplyr);


stringdist_join(a, b, 

                by = "name",

                mode = "left",

                ignore_case = FALSE, 

                method = "jw", 

                max_dist = 99, 

                distance_col = "dist") %>%

  group_by(name.x) %>%

  top_n(1, -dist)


#> # A tibble: 6 x 5

#> # Groups:   name.x [6]

#>   name.x price     name.y   qty       dist

#>   <fctr> <dbl>     <fctr> <dbl>      <dbl>

#> 1 Ace Co    10    Ace Co.     9 0.04761905

#> 2  Bayes    13 Bayes Inc.    99 0.16666667

#> 3    asd     2       asdf    10 0.08333333

#> 4    Bcy     1 Bayes Inc.    99 0.37777778

#> 5   Baes    15 Bayes Inc.    99 0.20000000

#> 6   Bays     1 Bayes Inc.    99 0.20000000


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 1063 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號