将西班牙语shapefile与dataframe合并

将西班牙语shapefile与dataframe合并,r,merge,gis,spatial,shapefile,R,Merge,Gis,Spatial,Shapefile,我在将西班牙各省的shapefile与特定数据帧合并时遇到问题。在合并它们之后,这些形状以某种方式与假省相关联(f.e.巴塞罗那返回Teruel形状)。我找了很多例子,但我不明白我做错了什么 所有必要的文件都存储在此文件夹中: 我将所有必要的文件输入R: gor=readShapeSpatial('prov_map.shp') prov=read.csv("prov.csv",sep = ';') prov=subset(prov,select=-X) 我更正数据文件中的省名称,使其在实际名

我在将西班牙各省的shapefile与特定数据帧合并时遇到问题。在合并它们之后,这些形状以某种方式与假省相关联(f.e.巴塞罗那返回Teruel形状)。我找了很多例子,但我不明白我做错了什么

所有必要的文件都存储在此文件夹中:

我将所有必要的文件输入R:

gor=readShapeSpatial('prov_map.shp')
prov=read.csv("prov.csv",sep = ';')
prov=subset(prov,select=-X)
我更正数据文件中的省名称,使其在实际名称之前没有数字,然后将结果变量转换为一个因子:

provcorr=colsplit(prov$Province," ",c("Prov_num","Province"))
prov$prov_num=provcorr$Prov_num
prov$province_nonum=provcorr$Province 
prov$provfact=as.factor(prov$province_nonum)   
由于西班牙口音,shapefile中的省名有点奇怪,因此我更正了它们,使它们与数据框中的名称匹配:

prov_nom=c("Melilla","Ceuta", "Zaragoza","Zamora", "Bizkaia",
       "Valladolid","Valencia/València","Toledo","Teruel",
       "Tarragona","Soria","Sevilla","Segovia","Cantabria",
       "Salamanca","Pontevedra","Palencia","Asturias","Ourense",
       "Navarra","Murcia","Málaga","Madrid","Lugo","Rioja, La",
       "Lleida", "León", "Jaén", "Huesca", "Huelva", "Gipuzkoa",
       "Guadalajara","Granada","Girona","Cuenca","Coruña, A",
       "Córdoba", "Ciudad Real", "Castellón/Castelló","Cádiz",
       "Cáceres", "Burgos","Barcelona", "Balears, Illes", "Badajoz",
       "Ávila", "Almería", "Alicante/Alcant","Albacete","Araba/Álava") 
gor@data$NAMEBIEN=as.factor(prov_nom)
到目前为止,这些形状与省名完全一致。例如,如果我键入:

plot(subset(gor,gor@data$NAMEBIEN=='Barcelona'))
巴塞罗那的形状显现出来了。但在我尝试将其与以下内容合并后:

gor@data=merge(gor@data,prov,by.x='NAMEBIEN',by.y='provfact',all.x=T)
现在已经不是这样了。当我在中键入与之前相同的代码时:

plot(subset(gor,gor@data$NAMEBIEN=='Barcelona'))
特鲁尔的形状出现了


这个问题快把我逼疯了。有什么建议吗

问题在于合并会更改数据帧的顺序。在原始数据帧中,Teruel与第9个多边形关联。但是在合并data.frame中的第9个条目之后,它是巴塞罗那,因此与Teruel的多边形关联。添加参数
sort=FALSE
,它应该可以工作

gor@data=merge(gor@data,prov,by.x='NAMEBIEN',by.y='provfact',all.x=T, sort = FALSE)
plot(subset(gor,gor@data$NAMEBIEN=='Barcelona'))

非常感谢!我刚开始用R编程,并不知道这一点。这帮了大忙!
gor@data=merge(gor@data,prov,by.x='NAMEBIEN',by.y='provfact',all.x=T, sort = FALSE)
plot(subset(gor,gor@data$NAMEBIEN=='Barcelona'))