Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sqlite和dplyr进行R中的模糊匹配_R_Sqlite_Dplyr_String Matching_Fuzzy - Fatal编程技术网

使用sqlite和dplyr进行R中的模糊匹配

使用sqlite和dplyr进行R中的模糊匹配,r,sqlite,dplyr,string-matching,fuzzy,R,Sqlite,Dplyr,String Matching,Fuzzy,我正在处理一个非常大的名称数据集,并使用RSQlite在R中运行它。我使用“groupby”dplyr将原始文件(1400万行)和相同的名称分组在一起。我还要确保单独的列计算值分组的次数以及它们的平均分数。它是一个单独的文件,我没有将它与主文件进行匹配。这很有效,但基于相同的字符串匹配,只会将文件减少到大约500万行 有没有办法通过模糊匹配将名称分组在一起,同时保留计数和平均值变量 以下是我正在使用的代码: employees <- company %>% select(name,

我正在处理一个非常大的名称数据集,并使用RSQlite在R中运行它。我使用“groupby”dplyr将原始文件(1400万行)和相同的名称分组在一起。我还要确保单独的列计算值分组的次数以及它们的平均分数。它是一个单独的文件,我没有将它与主文件进行匹配。这很有效,但基于相同的字符串匹配,只会将文件减少到大约500万行

有没有办法通过模糊匹配将名称分组在一起,同时保留计数和平均值变量

以下是我正在使用的代码:

employees <- company %>%
select(name, score)

head(employees)

employeescores <- employees %>%
group_by(name) %>%
summarize(count = n(), score = mean(score))

write.csv(employeescores, file = "employeescores.csv",
row.names=FALSE)
employees%
选择(姓名、分数)
主管(雇员)
员工得分%
分组单位(名称)%>%
汇总(计数=n(),分数=平均值(分数))
write.csv(employeescores,file=“employeescores.csv”,
row.names=FALSE)

数据应该有多少员工?您将如何处理同名员工?(我公司的其他人与我同名,我们的员工比你少得多)。返回原始数据并添加唯一ID(例如员工ID号)可能是唯一完整的解决方案。模糊匹配在这里很难,因为它可能需要干预来决定“足够”接近的程度。我已经完成了成对字符串匹配,对结果进行聚类,然后手动确定聚类是否有效,但这对500万个唯一名称不起作用。可复制的数据会有所帮助。如果我们可以假设我的数据集中的名称比您预期的更独特,并且我主要处理标点符号/拼写/前缀/后缀,那么什么是处理这一问题的好方法?特别是如果我以后对手动检查感兴趣,那么函数
utils::adist
可能就是您想要开始的地方。然而,500万个名字之间的成对比较将有点极端。如果您有一个标准化名称的数据库,我可能首先确定与您的数据库最匹配的名称。也就是说,对于每个唯一的姓名,从您已知的名册中找到单个最佳匹配项,然后将其分配为一个新列(例如“bestMatchName”),并在汇总时打印唯一匹配项(来自分数数据),以确认所有匹配项都是合法的。这些数据应该有多少名员工?您将如何处理同名员工?(我公司的其他人与我同名,我们的员工比你少得多)。返回原始数据并添加唯一ID(例如员工ID号)可能是唯一完整的解决方案。模糊匹配在这里很难,因为它可能需要干预来决定“足够”接近的程度。我已经完成了成对字符串匹配,对结果进行聚类,然后手动确定聚类是否有效,但这对500万个唯一名称不起作用。可复制的数据会有所帮助。如果我们可以假设我的数据集中的名称比您预期的更独特,并且我主要处理标点符号/拼写/前缀/后缀,那么什么是处理这一问题的好方法?特别是如果我以后对手动检查感兴趣,那么函数
utils::adist
可能就是您想要开始的地方。然而,500万个名字之间的成对比较将有点极端。如果您有一个标准化名称的数据库,我可能首先确定与您的数据库最匹配的名称。也就是说,对于每个唯一的姓名,从您已知的名册中找到单个最佳匹配项,然后将其指定为新列(例如“bestMatchName”),并在汇总时打印唯一匹配项(来自分数数据),以确认所有匹配项都是合法的。