我有一个有地址的数据库(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
如您所见,有五个不同的邮政编码,13100覆盖四个不同的城市。
我一直在尝试下面的代码,以确定一对夫妇是否正确:
df$city == cp$city[match(df$postcode, cp$postcode)]
但这对夫妇13100 LE THOLONET
是假的。我非常肯定,如果每个城市都有一个代码,并且每个代码都匹配一个城市,那么这段代码就可以了。我能做些什么来调整它以适应多到多的基数?
发布于 2017-06-06 15:44:03
你也许可以试试这样的方法:
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
https://stackoverflow.com/questions/44393869
复制相似问题