【问题标题】:Partial string merge R large dataset部分字符串合并R大数据集
【发布时间】:2015-03-10 22:26:17
【问题描述】:

[以下更新]

我想根据常用名称将大型数据集 (112 megs) 与较小的数据集 (

在大型数据集中,姓名全部大写,姓在前,偶尔带有后缀(即)

JUDE, RICHARD J. MR.

在较小的数据集中,它们采用标准的“名字姓氏”格式,没有逗号或后缀。每个名字都有相关的变量,例如他们给政治候选人多少钱,或者他们为哪家公司工作。

df1$x <- c("JAYSHREE, JOHNSON D. JR.", "JAMESON, KATHERINE", "TOMMEND, LEONARD"),
df1$p <- c(100, 200, 300)

df2$y <- c("Leo Tommend", "Jay Johnson", "Kathy Jameson")
df2$c <- c("Apple", "Google", "Facebook")

假设 x 有几百万行,y 有几千行。我已经尝试过 grepl、pmatch 和另一个教程 (here) 中的专用算法,但是当我尝试这些时 R 挂起。我已经用 data.table 加载了 X 框架以提高速度。

如果有帮助的话,我宁愿向合并的数据框添加许多行。如果我能做些什么来让这个问题更容易回答,请在 cmets 中告诉我。谢谢你的帮助

[更新]

感谢评论者,我能够将匹配次数减少到大约 20,000 次,但这对很多人来说仍然很遥远。我已经包含了两个文件的链接。这两个文件是1)。 2012 年和 2) 在美国进行政治捐款的每个人。每个互联网创始人的名字。

https://www.dropbox.com/sh/x6tk1pujvfn0fnb/AACQyuICbJPR7VdDf3bbdIwwa?dl=0

当我应用@BondedDust 的代码时,它显着缩小了!但仍有几十个重名。因此,例如,如果“Aaron”创立了一家公司,则将添加名为“Aaron”的每个人,并且新文件假定 100 个人创立了同一家公司,每个“Aaron”都捐赠给了不同的政治家。

目标是仅将每个互联网创始人的独特实例与其政治贡献相匹配。我可能需要在匹配算法中添加更多数据,而不仅仅是他们的姓名(可能包括他们的位置,但这是有问题的,因为许多互联网创始人有多个家)

希望对你有帮助!

【问题讨论】:

    标签: r merge match


    【解决方案1】:

    这是一个镜头:使用名字的前三个字母和全名作为匹配条件:

    df1$xsub= gsub("^([^,]+)\\, (.{3})(.+)", "\\2 \\1", tolower(df1$x) )
    df2$ysub= gsub("^(.{3})([^ ]+) (.+)", "\\1 \\3", tolower(df2$y) )
    
    
     merge(df1,df2, by.x="xsub", by.y="ysub")
    
    #----------------
             xsub                  x   p             y        c
    1 kat jameson JAMESON, KATHERINE 200 Kathy Jameson Facebook
    2 leo tommend   TOMMEND, LEONARD 300   Leo Tommend    Apple
    

    pkg:RecordLinkage 的 ?phonetics 帮助页面中还描述了一个 Soundex 函数 (soundex),它可能有助于处理拼写模糊相似的名称,例如。凯瑟琳和凯茜,或者约翰和乔恩。我没有任何缩短 Soundex 键的经验,但可能有机会在这项工作的基础上再接再厉。

    【讨论】:

    • 这是一个非常好的开始,但我在更大的数据集上进行了尝试,但我有太多的重复名称无法处理。我应该从一开始就分享原始文档,我正在编辑版本中添加更多细节以及完整文件的链接
    • 您说:“如果有帮助,我会在向合并的数据帧中添加许多行时犯错。”(我以为您的意思是“错误的太多”。)您需要更具体地说明您的目标。您还需要提供可能存在的任何其他数据字段,以消除常见名称之间的歧义。
    • 您说得对,我将在单独的线程上重做此操作,并添加有关数据和我的目标的更多详细信息。感谢您迄今为止的帮助
    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-04-30
    相关资源
    最近更新 更多