При поиске линейной интерполяции данных временного ряда в R я часто находил рекомендации по использованию na.approx()
из пакета zoo
.
Однако с нерегулярными сериями времени у меня возникли проблемы, поскольку интерполированные значения распределены равномерно по количеству пробелов, не принимая во внимание связанную временную отметку значения.
Я нашел способ использовать approxfun()
, но мне интересно, есть ли более чистое решение, в идеале основанное на tsibble
объекты с функциями из семейства пакетов tidyverts
?
Предыдущие ответы основывались на расширении нерегулярной сетки дат до регулярной сетки путем заполнения пробелов. Однако это вызывает проблемы, когда дневное время следует учитывать во время интерполяции.
Ниже приведен (пересмотренный) минимальный пример с отметкой времени POSIXct, а не только Дата:
library(tidyverse)
library(zoo)
df <- tibble(date = as.POSIXct(c("2000-01-01 00:00", "2000-01-02 02:00", "2000-01-05 00:00")),
value = c(1,NA,2))
df %>%
mutate(value_int_wrong = na.approx(value),
value_int_correct = approxfun(date, value)(date))
# A tibble: 3 x 4
date value value_int_wrong value_int_correct
<dttm> <dbl> <dbl> <dbl>
1 2000-01-01 00:00:00 1 1 1
2 2000-01-02 02:00:00 NA 1.5 1.27
3 2000-01-05 00:00:00 2 2 2
Любые идеи о том, как (эффективно) справиться с этим? Спасибо за вашу поддержку!