Итак, у меня есть следующая проблема: у меня есть набор данных A (объект data.table) следующей структуры:
date days rate
1996-01-02 9 5.763067
1996-01-02 15 5.745902
1996-01-02 50 5.673317
1996-01-02 78 5.608884
1996-01-02 169 5.473762
1996-01-03 9 5.763067
1996-01-03 14 5.747397
1996-01-03 49 5.672263
1996-01-03 77 5.603705
1996-01-03 168 5.470584
1996-01-04 11 5.729460
1996-01-04 13 5.726104
1996-01-04 48 5.664931
1996-01-04 76 5.601891
1996-01-04 167 5.468961
Обратите внимание, что столбец days и его размер могут различаться для каждого дня. Моя цель теперь состоит в том, чтобы (кусочно-линейно) интерполировать скорость по дням. Я делаю это каждый день через
approx(x=A[,days],y=A[,rate],xout=days_vec,rule=2)
где days_vec <- min_days:max_days
, то есть интересующий меня диапазон дней (скажем, 1:100).
У меня тут две проблемы:
приблизительно только интерполирует, т. е. не создает линейную подгонку по min(x) и max(x). Если меня сейчас интересуют дни 1:100, мне сначала нужно сделать это вручную, используя дни 9 и 15 (первые 2 строки A) через:
first_days <- 1:(A[1,days]-1) #1:8 rate_vec[first_days] <- A[1,rate] + (first_days - A[1,days])/(A[2,days]-A[1,days])*(A[2,rate]-A[1,rate])
а затем используйте строку примерно выше для rate_vec[9:100]
. Есть ли способ сделать это за 1 шаг?
- Прямо сейчас, учитывая, что мне нужно два шага, а точка сдвига между двумя процедурами (здесь 9) различается в зависимости от даты, я не вижу реализации через data.table, хотя это было бы гораздо предпочтительнее (используя методы data.table для интерполяции/ экстраполировать, а затем вернуть расширенный объект data.table). Таким образом, в настоящее время я запускаю цикл for по датам, что, конечно, намного медленнее.
Вопрос. Можно ли решить описанную выше проблему лучше, а также можно ли это каким-то образом решить с помощью методов data.table вместо цикла A?
days
, которых нет в таблице (2) создатьlm
дляrate ~ days
для каждой группы (определяетсяdate
) (3) использоватьpredict.lm
для создания значенияrate
дляdays
, гдеrate
отсутствует - person C8H10N4O2   schedule 05.09.2017