根据最近的日期和小时R Studio合并两个数据集

时间:2017-01-20 19:19:43

标签: r data.table dplyr

我有两个数据框:激光和室:

>Laser
      HeiferID            DateHour MeasurePPM
    8474 2016-12-18 15:17:22         49
    8474 2016-12-18 15:17:22         63
    8474 2016-12-18 15:17:23         18
    8474 2016-12-18 15:17:23         83
    8474 2016-12-18 15:17:24        108
    8474 2016-12-18 15:17:24        145

.....

      HeiferID            DateHour Chamberppm
     8474 2016-12-18 15:07:24       84.6
     8474 2016-12-18 15:11:09       87.0
     8474 2016-12-18 15:14:54       87.5
     8474 2016-12-18 15:18:39       93.2
     8474 2016-12-18 15:22:24       90.6
     8474 2016-12-18 15:26:09       89.5

...

(这只是一个例子,激光中有93184行,室内有17266行)。

例如,这里最近的Chamber $ DateHour是15:18:39,相应的值是93.2。所以我想将匹配15:18:39的所有行添加93.2作为最近的DateHour。

我想为所有Laser $ DateHour做到这一点:找到最近的Chamber $ DateHour并添加Chamberppm对应。所以条件将是:HeiferID(DateHour不是Chamber的唯一)和两个数据集之间最近的DateHour(我很难找到如何写这个)。在日期相同时添加列很容易:

> LaserChamber <- inner_join(Chamber,Laser, by=c("HeiferID","DateHour"))

但是当它是最接近的日期时,我无法写出来。 通常情况下,激光数据中的几行最终会得到相同的Chamberppm值。这很正常。 (在腔室数据中,每隔4分钟进行一次测量,在激光器中每0.5分钟进行一次测量!)

我尝试使用数据包data.table或dplyr但它根本不起作用。

有什么想法吗? 谢谢你的帮助

***更新: 我在评论之后尝试了这个:

> LaserChamber1 <- Laser1[Chamber,roll = "nearest", on=c("HeiferID")]
Error in bmerge(i, x, leftcols, rightcols, io, xo, roll, rollends, nomatch,  : 
  Attempting roll join on factor column x.HeiferID. Only integer, double or character colums may be roll joined.

0 个答案:

没有答案