【发布时间】:2020-07-19 13:14:42
【问题描述】:
在 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
任何想法如何(有效地)处理这个?感谢您的支持!
【问题讨论】:
-
您好 Jens,您找到满意的解决方案了吗?我会感兴趣的。
标签: r time-series tidyverse linear-interpolation tidyverts