我有一个地址(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
是假的。我很确定如果每个城市只有一个代码,并且每个代码都匹配一个城市,那么这段代码就可以了。如何将其调整为多对多基数?
答案 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