如何不使用as.Date将全为午夜时间的tibble转换为tsibble
问题原因
这不是tsibble的bug,是as_tsibble()默认自动推断时间序列间隔的逻辑限制。当索引列是POSIXct类型、所有时间值均为0点且存在缺失的天级间隔时,自动推断逻辑无法正确识别到你需要的24小时/1天的固定间隔,因此抛出错误。
解决方案
你可以通过interval参数手动指定时间间隔,不需要修改时间列类型,也不用设置regular=FALSE,完全满足后续fill_gaps()的使用要求,代码示例如下:
require(tsibble) require(lubridate) require(tidyverse) time_2 <- c(ymd_hms('20210101 000000'), ymd_hms('20210102 000000'), ymd_hms('20210103 000000'), ymd_hms('20210105 000000'), ymd_hms('20210106 000000')) df_2 <- tibble(time_2, y=rnorm(5)) # 手动指定间隔为1天 df_2_ts <- df_2 %>% as_tsibble(index=time_2, interval = days(1)) # 测试fill_gaps可正常补全2021-01-04 00:00:00的缺失行 df_2_ts %>% fill_gaps()
你也可以根据实际需求将days(1)替换为hours(24),效果完全一致。转换后的tsibble保留原始POSIXct类型的时间列,同时为规则时间序列,所有tsibble内置的时间处理函数都可以正常调用。
内容的提问来源于stack exchange,提问作者notnotaaabbb
相关产品推荐
相关产品推荐

