我不认为实际的邮递区号是作为数字邻接不一定对应于物理邻接有用。我想你问的是如何获得邮政编码的邻域矩阵,但要做到这一点,我相信你需要更多的信息。例如,您可以计算每个邮政编码中心的距离(给定的纬度和经度)并将它们设为阈值,但由于邮政编码的相对大小,一些较高密度区域的距离会较小。
假设你想这样做,你可以使用geosphere package.这个软件包有一个函数调用distHaversine这需要作为参数两分,和一个可选的球面半径参数,并为您考虑到曲率的点之间的距离地球和一切。
所有这一切都说,更好的方法可能是下载邮政编码边界的数据并查看边界相交的地方。我可以找到的最新数据(免费)是here;这是非常古老的。要访问它,请单击下拉菜单并选择邮政编码制表区。该文件大约500 MB。
解压缩的数据有一个.shp文件,this post有一个很好的指导形状数据的教程。公然采取了一些东西从那个家伙的帖子,下面的代码获取形状文件到内存:
# Install dependencies
install.packages("rgeos")
install.packages("maptools")
library(rgeos)
library(maptools)
# Define the projection to be used
crswgs84=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
# Load the shapes
postal.codes=readShapePoly("tl_2013_us_zcta510.shp",proj4string=crswgs84,verbose=TRUE)
与this答案进行操作,请在rgeos包有一个功能叫做gTouches从多边形构建邻接矩阵边界。
# Get adjacency matrix, returnDense=FALSE is to get a sparse matrix for memory purposes
adj.mat <- gTouches(postal.codes, byid=TRUE, returnDense=FALSE)
运行该代码为所有邮政编码可以是非常耗时的(也可能引发一些错误,由于位置的极端差异),但只能访问那些你有兴趣,你可以做排索引上形状对象。例如,得到的前200个邮政编码的邻接通过执行完成:
adj.mat.sub <- gTouches(postal.codes[1:200,], byid=TRUE, returnDense=TRUE)
实际邮政编码本身在形状对象内的数据帧。您可以通过访问它们:
[email protected]$ZCTA5CE10
您可以使用这些来获得指数出现在您自己的数据邮政编码,以及更快速的计算上更小,相关子集的邻接矩阵。所有这些都需要根据人口普查数据和您自己的数据框进行一些簿记。
可能有更多当前的邮政编码几何可供购买(或可能免费),但人口普查数据是可用且易于使用的良好组合。
我试着回答这个问题,但问题本身需要对格式和语法进行一些编辑,以便您提出的问题更加清晰。 –