簡體   English   中英

使用agrep()模糊名稱匹配更快的R代碼用於多種模式......?

[英]Faster R code for fuzzy name matching using agrep() for multiple patterns…?

我有點像R新手,並且一直在嘗試使用R中的agrep函數進行一些實驗。我有一個龐大的客戶數據庫(150萬行),其中我確定有很多重復。 但是,許多重復項並未使用table()顯示,以獲得重復精確名稱的頻率。 只是看一些行,我注意到許多重復是“獨特的”,因為在名稱的拼寫中有一個小錯過鍵。

到目前為止,為了找到我的數據集中的所有重復項,我一直在使用agrep()來完成模糊名稱匹配。 我一直在使用agrep()的max.distance參數來返回不同的近似匹配。 我想我在回歸誤報和錯過真正的比賽之間找到了一個愉快的媒介。 由於agrep()僅限於一次匹配單個模式,因此我能夠在堆棧溢出上找到一個條目,以幫助我編寫一個允許我將數據集與眾多模式匹配的sapply代碼。 這是我用來循環遍歷眾多模式的代碼,因為它梳理了我的數據集中的“重復”。

dups4<-data.frame(unlist(sapply(unique$name,agrep,value=T,max.distance=.154,vf$name)))

unique$name=這是我開發的唯一索引,它包含我希望在我的數據集中搜索的所有“模式”。

vf$name= is the column in my data frame that contains all of my customer names.

這種編碼適用於600個左右的客戶的小規模樣本,並且agrep工作正常。 我的問題是,當我嘗試使用的250K +名稱的唯一索引和agrep這對我的150萬個客戶。 當我輸入這個問題時,代碼仍然在R中運行並且尚未停止(此時我們將持續20分鍾)。

有沒有人有任何建議來加快速度或改進我使用過的代碼? 我還沒有從plyr包中嘗試過任何東西。 也許這可能會更快...雖然使用ddplyllply函數我有點不熟悉。

任何建議將不勝感激。

我很抱歉,我錯過了發布解決方案的最后一個請求。 這是我如何解決我的agrep,多模式問題,然后使用並行處理加速。

我基本上做的是采用整個字符串向量,然后將它們與自己進行模糊匹配,以找出向量中是否存在任何模糊匹配的重復記錄。

在這里,我創建了我希望在parSapply創建的並行進程中使用的集群(其中20個)

cl<-makeCluster(20)

因此,讓我們從代碼parSapply的最內層嵌套開始。 這是允許我在並行進程中運行agrep()的原因。 第一個參數是“cl”,它是我指定並行處理的簇的數量,如上所述。

第二個參數是我希望匹配的模式的特定向量。 第三個參數是我希望用來進行匹配的實際函數(在這種情況下是agrep)。 接下來的后續參數都是與我正在使用的agrep()相關的所有參數。 我已經指定我想要使用value = T返回的實際字符串(而不是字符串的位置)。 我還指定了我的max.distance我願意接受模糊匹配...在這種情況下成本為2.最后一個參數是我希望與第一個模式列表匹配的完整模式列表(參數2)。 當它發生時,我正在尋找重復,因此我將矢量與自身相匹配。 最后的輸出是一個列表,所以我使用unlist()然后數據框架它基本上得到一個匹配表。 從那里,我可以輕松地運行我剛剛創建的表的頻率表來查找,模糊匹配的字符串的頻率大於1,最終告訴我這樣的模式匹配自身和矢量中的另一個模式。

truedupevf<-data.frame(unlist(parSapply(cl,
                                     s4dupe$fuzzydob,agrep,value=T,
                                     max.distance=2,s4dupe$fuzzydob)))

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM