我正在尝试使用 RecordLinkage 包生成一个唯一的 ID 列。在处理较小的数据集(<= 1,000,000)时,我已经成功地做到了这一点,但是对于在包中使用不同(但相似)函数的较大数据集(> 1,000,000),我无法重现此结果。尽管记录中可能存在一些错误(接近匹配)或重复,但我得到了多个标识符变量,我想为其生成唯一 ID。
给定一些标识符数据框:
data(RLdata500)
df_identifiers <- RLdata500
这是较小日期集的代码(有效):
df_identifiers <- df_identifiers %>% mutate(ID = 1:nrow(df_identifiers))
rpairs <- compare.dedup(df_identifiers)
p=epiWeights(rpairs)
classify <- epiClassify(p,0.3)
matches <- getPairs(object = classify, show = "links", single.rows = TRUE)
# this code writes an "ID" column that is the same for similar identifiers
classify <- matches %>% arrange(ID.1) %>% filter(!duplicated(ID.2))
df_identifiers$ID_prior <- df_identifiers$ID
# merge matching information with the original data
df_identifiers <- left_join(df_identifiers, matches %>% select(ID.1,ID.2), by=c("ID"="ID.2"))
# replace matches in ID with the thing they match with from ID.1
df_identifiers$ID <- ifelse(is.na(df_identifiers$ID.1), df_identifiers$ID, df_identifiers$ID.1)
这种方法在这里讨论。但是在使用其他函数时,当应用于更大的数据集时,此代码似乎不可扩展。例如,大数据等价物compare.dedup
is RLBigDataDedup
,其RLBigData
类支持类似的功能,如epiWeights
, epiClassify
,getPairs
等。在这种情况下替换compare.dedup
为RLBigDataDedup
不起作用。
考虑以下对大型数据集的尝试:
df_identifiers <- df_identifiers %>% mutate(ID = 1:nrow(df_identifiers))
rpairs <- RLBigDataDedup(df_identifiers)
p=epiWeights(rpairs)
( . . . )
在这里,剩下的代码几乎与第一个相同。尽管epiWeights
并按预期epiClassify
在课堂上工作,但事实并非如此。该函数不使用参数。因此,所有后续代码都不起作用。RLBigData
getPairs
getPairs
show = "links"
在使用类中较大的数据集时,是否需要采取不同的方法来生成一列唯一 ID RLBigData
,或者这只是一个限制?