【问题标题】:R Merge 2 data.frames by zipcode proximityR按邮政编码接近合并2个data.frames
【发布时间】:2019-09-25 03:23:42
【问题描述】:

我有 2 个带有邮政编码的 data.frames。一个是房屋,另一个是气象站。 我需要通过邮政编码的接近度合并 2 个 data.frames,因此我将气象站的温度数据与最靠近它的房屋合并。我无法按邮政编码的数量合并,因为它在 2 个 datas.frames 上不一样,因为有些房屋在同一邮政编码中没有气象站。

这在 R 中可能吗?

非常感谢。

【问题讨论】:

  • 如果您可以分享一个可重现的示例,这将有助于解决您的问题。我推荐 R 中的 merge 函数;您可以选择在合并数据中保留房屋或气象站或其交点的所有值。 stackoverflow.com/questions/5963269/…
  • 离房屋和气象站最近的位置是邮政编码?你不能得到纬度/经度吗?无论如何,可重现的例子......
  • 您是否想找到离房子最近的气象站?如果您没有纬度/经度,这篇文章可能会有所帮助:stackoverflow.com/questions/17361909/…
  • 我不知道如何制作可重现的示例,因为我的数据是机密的。但这真的很简单。一列是房屋,另一列是邮政编码。还有数据。站点数据的框架包含站点名称、编号、邮政编码、日期和温度。
  • 科里,是的。我只有经纬度的车站,而不是房屋。

标签: r geocoding


【解决方案1】:

这是基于气象站列表很小,因此不会影响计算时间的假设:

library(dplyr)
library(purrr)

df_with_homes_stats = df_with_homes %>% 
  dplyr::mutate(closestZip = purrr::map_dbl(.x=homeZip,~df_with_stats$stationZip[which.min(abs(.x-df_with_stats$stationZip))])) %>% 
  dplyr::left_join(df_with_stats,by=c('closestZip'='stationZip'))

这里,“df_with_homes”是包含每个家庭邮政编码的大型数据集,“df_with_stats”对应于车站的邮政编码。这里的基本假设是邮政编码之间的距离与它们之间的数学差异成正比。

让我知道它是否有效。

【讨论】:

  • @makeshift_programmer 抱歉耽搁了。但是我还不能应用你的代码,因为我使用函数 revgeo 获得了车站的邮政编码(因为我只有纬度和经度),并且带有邮政编码的列似乎与其他人一起索引,所以我不能把它的名字放在后面$。我正在努力解决这个问题并让您知道。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多