检查R中的城市和邮政编码之间的对应关系

时间:2017-06-06 15:17:34

标签: r

我有一个地址(df)的数据库和法国所有现有邮政编码的数据库(cp)。我想根据邮政编码数据库检查df中的邮政编码/城市夫妇是否正确。

我面临的主要问题是数据的多对多关系。基本上,一个城市可以有多个邮政编码,不同的城市可以在同一个邮政编码区域。例如,这些城市正在引发问题:

        cp$city      cp$postcode
AIX EN PROVENCE            13080
AIX EN PROVENCE            13090
AIX EN PROVENCE            13100
AIX EN PROVENCE            13290
AIX EN PROVENCE            13540
BEAURECUEIL                13100
ST MARC JAUMEGARDE         13100
LE THOLONET                13100

正如您所看到的,Aix en Provence有五种不同的邮政编码,13100种邮政涵盖四个不同的城市。

我一直在尝试使用以下代码来查看一对是否正确:

df$city == cp$city[match(df$postcode, cp$postcode)]

但它回来说这对夫妻13100 LE THOLONET是假的。我很确定如果每个城市只有一个代码,并且每个代码都匹配一个城市,那么这段代码就可以了。如何将其调整为多对多基数?

1 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情:

cp = data.frame(city=c(rep("AIX EN PROVENCE",5),"BEAURECUEIL","ST MARC JAUMEGARDE","LE THOLONET"),postcode=c(13080,13090,13100,13290,13540,13100,13100,13100))
df = data.frame(city=c(rep("AIX EN PROVENCE",4),"BEAURECUEIL","LE THOLONET","PARIS","MARSEILLE"),postcode=c(13080,13090,13100,13540,13100,13100,75014,13001))


df$correct<-paste0(df$city,df$postcode) %in% paste0(cp$city,cp$postcode)

>df
             city postcode correct
1 AIX EN PROVENCE    13080    TRUE
2 AIX EN PROVENCE    13090    TRUE
3 AIX EN PROVENCE    13100    TRUE
4 AIX EN PROVENCE    13540    TRUE
5     BEAURECUEIL    13100    TRUE
6     LE THOLONET    13100    TRUE
7           PARIS    75014   FALSE
8       MARSEILLE    13001   FALSE