首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于地址串的部分匹配合并数据帧

基于地址串的部分匹配合并数据帧
EN

Stack Overflow用户
提问于 2015-07-26 04:38:59
回答 2查看 1.1K关注 0票数 1

我正在寻找一种方法来匹配两个不同的地址数据帧。两者都包含一个文本字符串(在我的示例中为“Line”列)、一个邮政编码/邮政编码类型标识符(“PC”列“)和一个唯一的Ref或ID代码。我需要将结果匹配放在一个新的数据框中,格式如下: DF1$Line,DF1$PD,DF2$Line,DF2$PD,Ref,ID和某种详细描述匹配强度的数字(这是基于下面的示例代码)。

我的实际数据集包含数千条记录,我一直在尝试使用'PC‘列对两个数据集进行子集,然后按照this的方式执行某种匹配,但得到的匹配结果是完全错误的。

这是一个与我的数据相似的虚构数据集(在这些示例中,每个数据集中的行彼此对应,不幸的是,我的实际数据不是这样格式化的)。

代码语言:javascript
运行
复制
DF1 <- data.frame(
Line = c("64 London Street, Jasper","46 London Road, Flat 2, Jasper","99 York Parade, Yorkie","99 Parade Road, Placename","29 Road Street, Townplace","92 Parade Street, Yorky"),
PC = c("ZZ1 4TY","ZZ1 4TY","PP1 9TR","ZZ1 4TY","PP1 9TR","PP1 9RT"),
Ref = c("123451","567348","23412","98734","43223","32453")
)

代码语言:javascript
运行
复制
DF2 <- data.frame(    
Line = c("64 London St, Jasper","Flat 2, 46 Road, London, Jasper","99 York Parade, Yorky","99 Parade Road, Placenames","Flat 3, 29 Road Street, Townplace, Townplace","92 Street, Parade, Yorkie"),
PC = c("ZZ1 4TY","ZZ1 4TY","PP1 9TR","ZZ1 4TY","PP1 9TR","PP1 9RT"),
ID = c("ABGED","GGFRW","UYTER","RTERF","WERWE","OYUIY")
)

任何帮助解决这个问题的人都会非常感激,因为任何帮助我量化匹配精确度的指标都会非常感谢。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-07-26 05:00:22

这是我的基本R解决方案,如果我得到了,请告诉我。

代码语言:javascript
运行
复制
 DF3 <- merge(DF1, DF2, by = "PC")
 DF3[!duplicated(DF3$Ref) , ]
        PC                         Line.x    Ref                    Line.y    ID
1  PP1 9RT        92 Parade Street, Yorky  32453 92 Street, Parade, Yorkie OYUIY
2  PP1 9TR         99 York Parade, Yorkie  23412     99 York Parade, Yorky UYTER
4  PP1 9TR      29 Road Street, Townplace  43223     99 York Parade, Yorky UYTER
6  ZZ1 4TY       64 London Street, Jasper 123451      64 London St, Jasper ABGED
9  ZZ1 4TY 46 London Road, Flat 2, Jasper 567348      64 London St, Jasper ABGED
12 ZZ1 4TY      99 Parade Road, Placename  98734      64 London St, Jasper ABGED
票数 1
EN

Stack Overflow用户

发布于 2016-02-17 19:59:24

我会考虑首先使用agrep评估潜在的匹配

代码语言:javascript
运行
复制
for (i in 1:length(DF1$Line)) {
  matchDF1 <- agrep(pattern = DF1$Line[i], x = DF2$Line, max.distance = 0.5,
                    value = TRUE) 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31630897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档