Линейная интерполяция данных из нескольких столбцов. Таблица R - PullRequest
0 голосов
/ 07 мая 2020

У меня есть несколько 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, но не могу понять этого.

...