有没有一种巧妙的方法来连接 R 中的时间键值接近但不完全相同的数据表?例如,假设我有一个针对不同时间段给出的结果数据表:
DT1 = data.table(x=rep(c("a","b","c"),each=3), time=c(10,30,60), v=1:9)
在这里,我们有一些在不同时间(时间)获取的不同类别(x)的值(v)。现在假设我有来自另一个来源的数据,这些数据为不同类别提供了一些时间值:
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(10,10,60))
我可能有兴趣尝试将 DT2 中的时间尽可能与 DT1 匹配,以预测我的 DT2 类别的值 v。我想做类似的事情
setkeyv(DT2,c("x","time"))
merge(DT1,DT2,by=c("time","v")
返回:
time x v
1: 10 a 1
2: 10 b 4
3: 60 c 9
但是,如果我的时间没有相同的精度怎么办?例如:
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(17,54,3))
有没有办法执行类似的合并,但 DT2 的选择时间接近 DT1 的时间?也就是说 17 接近 30,54 接近 60,3 接近 10?
如果这个简单的例子不清楚,我将简要解释我遇到的更大的问题。我有一个包含列的数据表:类别、时间、输出 1、输出 2...有数百个类别与相关时间。我可能想在特定时间为所有类别提取输出 1。由于时间的采样没有明显的逻辑,有时时间会四舍五入到最接近的偶数秒;在其他情况下,时间会四舍五入到最接近的分钟甚至 10 分钟。
我可以编写一个脚本以更常见的格式重写时间,但我很好奇是否有我没有见过的光滑的 data.table 解决方案。我探索了滚动合并,但没有成功。