我在R包RecordLinkage中使用compare.linkage函数, 得到一个结果,我知道是错的,所以我知道我误解了一些东西。 我正在使用R 3.2.3 for x64 Windows。我对Stata非常熟悉,但与R不太熟悉。我只是在r-help上交叉发布。
我可以从阻塞字段创建记录对,但所有对都是未知状态(NA)。我无法创建匹配或不匹配。我想要一个简单的工作示例,说明如何使用RecordLinkage包链接数据集。看来手册和R Journal Vol。 2/2仅显示如何使用compare.dedup函数对单个数据集进行重复数据删除,而不是如何使用compare.linkage函数将两个数据集链接在一起。我可以在R Journal文章中重现这些例子,所以我的R安装没问题。
手册中的示例数据集对7个变量有500和10000个观测值,但1个观测值和2个变量足以显示问题。 我的第一个比较模式就像这样:
id1 id2 fname_c1 bm is_match
1 17 343 1 1 NA
相反,我希望并期望一个看起来像这样的比较模式:
id1 id2 fname_c1 bm is_match
1 17 343 1 1 1
对于名字的第一个组件,我的阻塞变量是fname_c1。我的匹配变量是出生月份的bm。我的理解是,我的示例输出中的第1行是fname_c1在基础数据集中匹配的第一行。我希望并且当两个链接数据集中的匹配变量bm = 1时,我希望is_match为1,如示例所示。
有关详细信息,这是我键入的内容和R输出:
> library(RecordLinkage)
> data(RLdata500)
> data(RLdata10000)
> RLdata500[17, ]
fname_c1 fname_c2 lname_c1 lname_c2 by bm bd
17 ALEXANDER <NA> MUELLER <NA> 1974 9 9
> RLdata10000[343, ]
fname_c1 fname_c2 lname_c1 lname_c2 by bm bd
343 ALEXANDER <NA> BAUMANN <NA> 1957 9 7
> rpairs <- compare.linkage(RLdata500,RLdata10000,blockfld=c(1), exclude=c(2:5,7))
> rpairs$pairs[c(1:2), ] # Why is_match=NA? (should be 1)
id1 id2 fname_c1 bm is_match
1 17 343 1 1 NA
2 17 2385 1 0 NA
> rpairs <- epiWeights(rpairs) # (Weight calculation)
> summary(rpairs) # (0 matches in Linkage Dataset)
Linkage Data Set
500 records in data set 1
10000 records in data set 2
47890 record pairs
0 matches
0 non-matches
47890 pairs with unknown status
Weight distribution:
[omitted here to save space]
参考文献:
包'RecordLinkage'手册 (可在线获取PDF格式 https://cran.r-project.org/web/packages/RecordLinkage/RecordLinkage.pdf)
R Journal文章文章“RecordLinkage包:检测数据中的错误” (可在线获取PDF格式 https://journal.r-project.org/archive/2010-2/RJournal_2010-2_Sariyar+Borg.pdf)
我在手册和R期刊文章中看到了关于真实匹配结果的身份参数的内容,但我想我只需要它作为参考(“黄金标准”)数据集。我的示例在两个基础数据集中都有一个非缺失值(bm = 1),因此这不是结果为NA的原因。我错过了什么?如何使用R中的compare.linkage链接两个简单的数据集?
Anders Alexandersson
andersalex@gmail.com
答案 0 :(得分:3)
我遇到了同样的问题,我有这个答案的可能解决方案这是由于identity
参数。
从示例数据中,在Record Linkage包中,我发现此向量identity.RLdata500
携带有关500条记录中RLdata500
的重复记录的信息50条是重复记录
length(unique(identity.RLdata500))
[1] 450
我在我的数据集中找到了类似的列并存储为单独的向量,并将向量传递给身份参数
New_data_seq
118
118
New_data_seq <- R_New_data_zero$SEQ_NO
abc <- compare.dedup (R_New_data_zero,identity = New_data_seq)
BICODE ALCODE IS_T OID conc
I A 1 99 IA1
I A 1 99 IA1
abc$pairs[1:1, ]
id1 id2 BICODE ALCODE IS_T OID conc is_match
1 2 1 1 1 1 1 1