gpt4 book ai didi

r - 使用 agrep() 对多个模式进行模糊名称匹配的更快 R 代码......?

转载 作者:行者123 更新时间:2023-12-04 20:50:00 26 4
gpt4 key购买 nike

我是一个 R 新手,一直在尝试使用 agrep 进行一些实验。 R 中的函数。我有一个庞大的客户数据库(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 返回实际字符​​串(而不是字符串的位置)。我还指定了我愿意在模糊匹配中接受的最大距离......在这种情况下,成本为 2。最后一个参数是我希望与第一个模式列表匹配的模式的完整列表(参数2)。碰巧的是,我正在寻找重复项,因此我将向量与自身进行匹配。最终输出是一个列表,因此我使用 unlist() 然后对其进行数据框化以基本上获得匹配表。从那里,我可以轻松地运行我刚刚创建的表的频率表来找出哪些模糊匹配的字符串的频率大于 1,最终告诉我这样的模式与其自身和向量中的其他模式匹配。
truedupevf<-data.frame(unlist(parSapply(cl,
s4dupe$fuzzydob,agrep,value=T,
max.distance=2,s4dupe$fuzzydob)))

我希望这有帮助。

关于r - 使用 agrep() 对多个模式进行模糊名称匹配的更快 R 代码......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com