在R中搜索时间序列数据的线性插值时,我经常发现建议使用
zoo
包中的na.approx()
。然而,对于不规则时间序列,我遇到了问题,因为插值值在缺口数量上平均分布,而不考虑值的相关时间戳。我找到了一个解决方法,使用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
有没有关于(高效)处理这个的想法?感谢您的支持!