【问题标题】:Fuzzy merging two data sets by Lat, Lon and time按纬度、经度和时间模糊合并两个数据集
【发布时间】:2017-10-23 05:06:29
【问题描述】:

我有两个数据集,fire 数据集很大,而 global temp 数据集比它小很多。

所以我想通过 DISCOVERY_DATE = 日期、纬度 = 纬度和经度 = 经度来匹配这两个数据集。现在我知道他们中的大多数都不会匹配,但我正在寻找尽可能接近的匹配。我认为fuzzyjoin 将是解决此问题的好方法,但是如何将这三个都匹配。

我认为问题可能是我似乎无法为此找到一个好的功能。

 tempFire <- fuzzy_join(fires, Temps, multi_by = c("DISCOVERY_DATE" = "date", "LONGITUDE" = "Longitude", "LATITUDE" = "Latitude"), multi_match_fun = D, mode = "full")

数据

> head(z, n =10)
   fires.LATITUDE fires.LONGITUDE fires.DISCOVERY_DATE
1        40.03694       -121.0058           1970-01-29
2        38.93306       -120.4044           1970-01-29
3        38.98417       -120.7356           1970-01-29
4        38.55917       -119.9133           1970-01-29
5        38.55917       -119.9331           1970-01-29
6        38.63528       -120.1036           1970-01-29
7        38.68833       -120.1533           1970-01-29
8        40.96806       -122.4339           1970-01-29
9        41.23361       -122.2833           1970-01-29
10       38.54833       -120.1492           1970-01-29
    > head(b, n = 10)
   Temps.Latitude Temps.Longitude Temps.date
1           32.95         -100.53 1992-01-01
2           32.95         -100.53 1992-02-01
3           32.95         -100.53 1992-03-01
4           32.95         -100.53 1992-04-01
5           32.95         -100.53 1992-05-01
6           32.95         -100.53 1992-06-01
7           32.95         -100.53 1992-07-01
8           32.95         -100.53 1992-08-01
9           32.95         -100.53 1992-09-01
10          32.95         -100.53 1992-10-01

【问题讨论】:

  • 你看过fuzzyjoin 吗?我认为它不会在一次连接中对不同类型进行“多重匹配”,但也许您可以例如首先对日期进行间隔连接,然后对坐标进行地理连接。
  • 是的,我只是不确定什么功能可以完成所有这些工作。
  • @ClintonWoods 我对地理数据没有经验,请您解释一下如何将32.95N(从b)转换为40.03694 中的40.03694 等数字格式z
  • 抱歉,我无法从您的帖子中看出:您在这里使用数据框吗?如果是这样,也许data.table 对非 equi 连接的支持就是您要寻找的。如果您的数据已经在sp 对象中,您可以考虑单独使用data 插槽,然后在合并后重建对象。
  • @PoGibas 我将 lat 和 lon 更改为相同的格式。

标签: r merge spatial temporal


【解决方案1】:

我建议您根据时间距离(即减去日期)和空间距离(基于纬度和经度)的加权组合提出适当的距离度量。根据应用程序的空间和时间接近度的相对重要性确定权重。然后使用此距离度量计算一个矩阵,该矩阵包含从第一个数据集中的每个点到第二个数据集中的每个点的距离。最后,找到每一行和/或每一列中的最小距离,以选择一个数据集中与另一个数据集中的点最接近的数据点。您可能希望丢弃距离大于某个阈值的任何对。

【讨论】:

  • stackoverflow.com/questions/20590119/… 。这与您所说的类似,但是当我仅针对 lat 和 lon 进行尝试时,它告诉我由于 500 GB 向量而无法计算。也许更紧凑的方式?
  • 听起来这两个数据集相当大。根据您要执行的操作,您可能一次只需要距离矩阵的一行或一列。您可以编写一个循环,逐一遍历一个数据集中的每一行,并将其与整个其他数据集进行比较。这将解决内存问题,但显然需要更长的运行时间。
猜你喜欢
  • 2019-10-30
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多