使用R中的RecordLinkage包中的函数RLBigDataLinkage记录链接数据帧

时间:2011-04-20 10:59:05

标签: r

我想链接两个使用不同数字键的数据框,但类似的字符串。具体而言,一个数据框使用数字键GVKEY和公司名称CONML

> head(temp.compustat[order(temp.compustat$CONML, decreasing = T), ])
        GVKEY             CONML
225994  13023  ZZZZ Best Co Inc
211017  11696       Zytrex Corp
213816  11951 Zytec Systems Inc
309886  29163        Zytec Corp
373950 129441         Zynex Inc
383184 145228  ZymoGenetics Inc
> dim(temp.compustat)
[1] 31354     2

其他数据框使用不同的数字键companyid和公司名称company,可能与第一个数据库中的CONML略有不同。

> head(temp.dealscan[ order(temp.dealscan$company, decreasing = T), ])
      companyid            company
70473     18192 Zytec Corp 
32025     16969 Zynaxis Inc
19714     92271 ZYGO Teraoptix Inc
80473     13185 Zygo Corp 
1901      24303 Zycon Corp SDN Bhd 
33993     21219 Zycon Corp

> dim(temp.dealscan)
[1] 85818     2

(我正在反向排序,因为DealScan数据库在某些条目的开头有空格和*)。似乎包RLBigDataLinkage中的函数RecordLinkage是解决方案,但我无法获得无人监督的链接工作。这是我的错误。

> library(RecordLinkage)
> rpairs <- RLBigDataLinkage(dataset1 = temp.compustat, dataset2 = temp.dealscan, exclude = 1, strcmp = 2, strcmpfun = "levenshtein")
> result <- epiClassify(rpairs, threshold.upper = 0.5)
Error in if (max <= min) stop("must have max > min") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In nData1 * nData2 : NAs produced by integer overflow

与我昨天开始一致,我看到了question手动使用Levenshtein距离函数。这种方法对我来说是更好的选择吗?这些数据框相当大,因此RLBigData似乎应该是正确的方法(软件包作者推荐它用于> 1000条目)。谢谢!

1 个答案:

答案 0 :(得分:2)

这是由于包代码中的错误现在已修复。固定版本可以从R-Forge的项目网站(https://r-forge.r-project.org/projects/recordlinkage)获得,可能要到明天早上。请注意,它取决于data.table包的1.5.4版本,该版本目前在CRAN上不可用,但依赖于R-Forge(https://r-forge.r-project.org/projects/datatable/)。