问题描述
我有一个 130 万行的出版物数据集,对于每条记录,我想从具有 860 万行的第二个数据集中检索 paper_id。这个想法是使用两个表中的多个列来查找数据集 2 中数据集 1 的匹配项,如这个功能性但简化的脚本所示:
library(fuzzyjoin); library(tidyverse)
dataset1 %>%
stringdist_left_join(dataset2 %>% select(Title,Year,Publication_id,Paper_id),by = list(x = c("Title","Year","Publication_id"),y = c("Title","Publication_id"))
max_dist = 3,ignore_case = TRUE,distance_col = NULL)
我有两个问题。第一个是只有“标题”有需要模糊匹配的变体(错别字、缩写、特殊字符等),但代码接受所有三个使用字段的变体。这会增加可能与错误匹配的数量,因为类似的标题出现在不同的年份和出版物中。
library(fuzzyjoin); library(tidyverse)
dataset1 %>%
stringdist_left_join(dataset2 %>%
select(Title2 = Title,Year2 = Year,Pub_id2 = Publication_id,y = c("Title2","Year2","Pub_id2"))
max_dist = 3,distance_col = NULL) %>%
filter(Year == Year2,Publication_id == Pub_id2)
这将解决第一个问题,但还有第二个问题:脚本在样本数据上运行正常,但是当我尝试将它用于整个数据集时,它给出错误“向量内存耗尽(达到限制?) ”。
所以,我的问题是:
-
是否可以确定哪些列应该相同,哪些应该模糊,这可能会使脚本更轻松?
-
是否有可能根据相同的变量对两个数据集进行子集化,然后在子集中的标题上运行模糊匹配,将所有内容合并回来? (我不确定这是否可行,因为我将拥有 18 万个子集:6 年的 3 万篇出版物。
感谢任何帮助。
最佳
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)