首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R查找两个美国邮政编码列之间的距离

R查找两个美国邮政编码列之间的距离
EN

Stack Overflow用户
提问于 2019-03-29 07:48:02
回答 1查看 2.3K关注 0票数 2

我想知道用R来计算两个美国邮政编码列之间距离的最有效方法是什么。

我听说过用于计算邮政编码之间差异的geosphere包,但并不完全理解它,我想知道是否还有其他方法。

例如,假设我有一个数据框,它看起来像这样。

代码语言:javascript
复制
ZIP_START     ZIP_END
 95051         98053
 94534         94128
 60193         60666
 94591         73344
 94128         94128
 94015         73344
 94553         94128
 10994         7105
 95008         94128

我想创建一个新的数据框,看起来像这样。

代码语言:javascript
复制
ZIP_START     ZIP_END     MILES_DIFFERENCE
 95051         98053       x
 94534         94128       x
 60193         60666       x
 94591         73344       x
 94128         94128       x
 94015         73344       x
 94553         94128       x
 10994         7105        x
 95008         94128       x

其中x是两个邮政编码之间的里程差。

计算此距离的最佳方法是什么?

这是创建示例数据框的R代码。

代码语言:javascript
复制
df <- data.frame("ZIP_START" = c(95051, 94534, 60193, 94591, 94128, 94015, 94553, 10994, 95008), "ZIP_END" = c(98053, 94128, 60666, 73344, 94128, 73344, 94128, 7105, 94128))

如果你有任何问题,请告诉我。

任何建议都是值得感谢的。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 08:34:33

有一个名为"zipcode“的方便的R包,它提供了一个包含邮政编码、城市、州以及纬度和经度的表。因此,一旦你有了这些信息,"geosphere“包就可以计算点之间的距离。

代码语言:javascript
复制
library(zipcode)
library(geosphere)

#dataframe need to be character arrays or the else the leading zeros will be dropped causing errors
df <- data.frame("ZIP_START" = c(95051, 94534, 60193, 94591, 94128, 94015, 94553, 10994, 95008), 
       "ZIP_END" = c(98053, 94128, 60666, 73344, 94128, 73344, 94128, "07105", 94128), 
       stringsAsFactors = FALSE)

data("zipcode")

df$distance_meters<-apply(df, 1, function(x){
  startindex<-which(x[["ZIP_START"]]==zipcode$zip)
  endindex<-which(x[["ZIP_END"]]==zipcode$zip)
  distGeo(p1=c(zipcode[startindex, "longitude"], zipcode[startindex, "latitude"]), p2=c(zipcode[endindex, "longitude"], zipcode[endindex, "latitude"]))
})

有关输入数据框的列类的警告。邮政编码应该是字符,而不是数字,否则会丢弃前导零,从而导致错误。

从distGeo返回的距离以米为单位,我将允许读者确定正确的单位转换为英里。

更新

zipcode包似乎已经存档。有一个替代包:"zipcodeR“,它提供经度和纬度数据以及附加信息。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55408526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档