我有两个数据框:激光和室:
>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.