填写缺失的时间序列间隔

Fill out missing time series intervals

我有几个时间间隔记录如下:

  In         Out          tag      
  2008-12-18 2008-12-19   1
  2008-12-22 2008-12-23   1
  2008-12-29 2009-01-02   1
  2009-01-05 2009-01-05   1
  2009-01-13 2009-01-13   1
  2009-01-14 2009-01-14   1
  2009-01-19 2009-01-19   1

我想填补缺失的间隔,所以它看起来像这样:

  In         Out          tag      
  2008-12-18 2008-12-19   1
  2008-12-20 2008-12-21   0
  2008-12-22 2008-12-23   1
  2008-12-24 2008-12-28   0
  2008-12-29 2009-01-02   1
  2009-01-03 2008-01-04   0
  2009-01-05 2009-01-05   1
  ...

我知道我可以使用 zoo 来填写时间序列中缺失的日期。此外,我可以使用 lubridate 包中的 interval(start, end) 创建间隔。不过,我最初的想法是我可以以某种方式将其组合起来以填补缺失的间隔。

我也一直在考虑是否有任何 "brut-force" 方法可以用来填充间隔。例如,函数将在上一行中获取 Out 的最后一项,并从下一行中获取 In 的最后一项,但尚未找到任何解决方案。

理想情况下,我想知道是否有任何聪明的方法可以使用 zoolubridatexts 或 R 中的其他工具来做到这一点?

试试这个:

library(data.table)

df = data.table(
  In=as.Date('2008-12-18') + cumsum(c(0,4,7,7,8,1,5)),
  Out=as.Date('2008-12-19') + cumsum(c(0,4,10,3,8,1,5)),
  tag=1)

toMerge = df[, .(In=Out+1, Out=shift(In-1, type='lead'), tag=0)][In <= Out]

> merge(df, toMerge, all=T)
#            In        Out tag
# 1: 2008-12-18 2008-12-19   1
# 2: 2008-12-20 2008-12-21   0
# 3: 2008-12-22 2008-12-23   1
# 4: 2008-12-24 2008-12-28   0
# 5: 2008-12-29 2009-01-02   1
# 6: 2009-01-03 2009-01-04   0
# ...