【发布时间】:2019-03-20 12:40:35
【问题描述】:
我需要在三个变量上匹配两个数据集。 三个变量中的两个不存在拼写错误(按设计)。 只有第三个变量需要模糊匹配。
标准的 fuyyzmerge 通过模糊连接所有三个变量会产生一些问题。
有没有办法指定这三个中的哪个应该模糊匹配,哪个应该精确匹配?
可重现的例子:
dataset_1 <- setNames(data.frame(c(1995,1996,1995,1996),c("AA","AA","BB","BB"),c("AAAA","AAAA","BBBB","BBBB")), c("var_1", "var_2", "var_3"))
dataset_2 <- setNames(data.frame(c(1995,1996,1995,1996),c("AA","AA","BB","BB"),c("AAAA","AAAA","BBBB","BBBC"),c("A","B","C","D")), c("var_1", "var_2", "var_3","var_4"))
merged <- stringdist_join(dataset_1, dataset_2,
by=c("var_1","var_2","var_3"),
max_dist = 2,
method = c("soundex"),
mode = "full",
ignore_case = FALSE)
理想结果:
merged <- setNames(data.frame(rep(1995,4),c("AA","AA","BB","BB"),c("AAAA","AAAA","BBBB","BBBB"),c("A","B","C","D")), c("var_1", "var_2", "var_3","var_4"))
【问题讨论】:
-
技术上是的,但它对所有
by变量进行笛卡尔积,因此在一次操作中可能会也可能不会,您的数据有多大? -
鉴于我在精确匹配后设法将其分解,我仍然保留大约一千个观察结果来模糊行进。
-
stringdist_join是fuzzy_join的包装器,fuzzy_join有一个match_fun参数,它可以是唯一函数或函数列表,只要你的by参数,所以我认为你可以使用fuzzy_full_join和match_fun = list(`==`, `==`, function(x,y) stringdist::stringdist(x,y, "soundex") < 2)。如果您可以使您的示例可重现并提供您预期的输出,这将有所帮助。 -
请在原帖中找到可重现的代码和预期结果。