У меня есть несколько 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
находятся в EST
, а box_data
имеют их в UTC
, поэтому они выглядят разными, но указывают на один и тот же фактический период времени.
Приведенные выше данные являются очень маленькой выборкой, фактические наборы данных содержат по 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
за один вызов? Я считаю, что должен быть способ сделать это, используя lapply
вместо .SD
или .SDcols
, но не могу понять этого.