首页 > 解决方案 > 线性插值多列data.table R

问题描述

我有多个data.table对象,每个对象都包含来自传感器的 1-3 个测量值作为时间序列数据。每个传感器都有一个唯一的测量时间戳和一个唯一的采样间隔,这意味着没有两个data.tables具有“匹配”的时间值:

> head(particle_counter)
                  time count3 count5 count10
1: 2020-04-17 19:45:08  42436   2848     479
2: 2020-04-17 19:46:08  43757   2999     470
3: 2020-04-17 19:47:08  43107   2967     448
4: 2020-04-17 22:59:27  41516   2394     184
5: 2020-04-17 23:00:27  42571   2645     322
6: 2020-04-17 23:01:27  70994  28007   18477


> head(box_data)
                  time     pm1    pm25    pm10
1: 2020-04-18 00:46:00 1.13658 1.94190 3.56055
2: 2020-04-18 00:47:00 1.23021 2.02457 6.33052
3: 2020-04-18 00:48:00 1.33757 2.16237 5.85435
4: 2020-04-18 00:49:00 1.31169 2.08443 2.95454
5: 2020-04-18 00:50:00 1.52275 2.53015 6.15066
6: 2020-04-18 00:51:00 1.60951 2.23225 2.42537

例如,对于上述两个数据集,我想线性插值 的所有列,box_data其时间戳与particle_counter. 时间戳在particle_counter其中ESTbox_dataUTC就是为什么它们看起来不同但指向相同的实际时间段的原因。

上述数据是一个非常小的样本,实际数据集每个包含 30,000 行。

我可以approxfun用于单个列,例如:

> f1 <- approxfun(x = box_data$time, y = box_data$pm1, method = 'linear')
> f1(v = particle_counter$time)
[1]       NA 1.149064 1.244525 3.137237 2.879353 3.103322

box_data有没有一种好的(优雅的)方法可以在一次调用中将其应用于所有列?我相信应该有一种方法可以通过使用lapplyover .SD.SDcols但不能完全弄清楚。

标签: rdata.tableinterpolation

解决方案


推荐阅读