【发布时间】:2018-03-04 06:53:15
【问题描述】:
我正在尝试将一张表中包含的手机塔 ID 与手机塔 ID 的位置主表(以纬度计)进行匹配。位置表中的 ID 格式与第一个表中的格式不同,我正在尝试使用 agrep() 进行模糊匹配。举个例子,假设我要匹配的 ID 是:
x <- c("405-800-125-39883")
位于位置表中的 ID 示例:
y <- c("405-810-1802-19883", "405-810-2101-29883", "405-810-1401-31883",
"405-810-5005-49883","125-39883","405-810-660-39883")
然后我将agrep() 与max.distance 的不同组合一起使用:
agrep(x,y,max.distance=0.3,value=TRUE)
这会返回:
[1] "405-810-1802-19883" "405-810-2101-29883" "405-810-1401-31883" "405-810-5005-49883"
[5] "405-810-660-39883"
而我真正追求的价值是"125-39883"
我还尝试了stringdist 包中的stringdist_join() 函数,并将其应用于两个不同max_dist 的数据框,但没有成功。基本上,我正在寻找的是最后一个连字符之后的完美匹配,然后是倒数第二个连字符上的数字,依此类推。有什么办法吗?
【问题讨论】:
-
如果你正在寻找一个完全匹配然后去掉子字符串然后做
==y[y == substring(x, 9)] -
感谢@akrun,但不完全是。我分享的数据只是一个演示样本。您的解决方案将适用于这个特定示例。但是,该值也可能存储为
"800-125-39883"或"5-800-125-39883"。所以不能在substring()中真正指定9 -
问题在于,在 agrep 或其他中,它与其他数字匹配,并且无法真正区分最后几个元素。我最好提供所有案例的例子
-
@akrun 只是在这里大声思考,但是您认为拆分“-”然后从最后一个值开始匹配会有所帮助吗?我觉得可能但不确定如何做到这一点。
-
我仍然不清楚你匹配的是哪些数字