使用前一天的数据完成时间序列中的缺失值 - 使用 R

Complete missing values in time series using previous day data - using R

我有一个数据框,其中每一行都是不同的日期,每一列都是不同的时间序列。
table 中的日期范围是 01.01.2019-01.01.2021.
一些时间序列仅与部分日期相关,并且在周末和节假日有缺失值。

如何仅使用每列相关日期的前一天值来完成每个时间序列的缺失值(如果特定列中的时间序列是从 01.03.2019 到 01.09.2019 我想完成仅此日期范围内的缺失值)?

我试过使用填充功能:

data <- data %>%  
fill(colnames(data)) 

但在特定时间序列结束后,它也会补齐缺失的数据。

例如,df为:

#  Date         time_series_1           time_series_2
1  01-01-2019               NA                      10
2  02-01-2019               5                       NA 
3  03-01-2019               10                      NA 
4  04-01-2019               20                      6 
5  05-01-2019               30                      NA 
6  06-01-2019               NA                      8 
7  07-01-2019               7                       NA 
8  08-01-2019               5                       NA 
9  09-01-2019               NA                      NA
10 10-01-2019               NA                      NA 

期望的输出是:

#  Date         time_series_1           time_series_2
1  01-01-2019               NA                      10
2  02-01-2019               5                       10 
3  03-01-2019               10                      10 
4  04-01-2019               20                      6 
5  05-01-2019               30                      6 
6  06-01-2019               30                      8 
7  07-01-2019               7                       NA 
8  08-01-2019               5                       NA 
9  09-01-2019               NA                      NA
10 10-01-2019               NA                      NA 

谢谢!

如果我没理解错的话,诀窍是除了最底部的 NA 之外,你要向下填充。 tidyrfill 的问题是它一直向下。

这不是一个完整的 tidyverse 解决方案,但对于此数据:

library(dplyr)
library(tidyr)
data <- tribble(
  ~Date, ~time_series_1, ~time_series_2,
  as.Date("2019-01-01"), NA, 10,
  as.Date("2019-02-01"), 5, NA,
  as.Date("2019-03-01"), 10, NA,
  as.Date("2019-04-01"), 20, 6,
  as.Date("2019-05-01"), 30, NA,
  as.Date("2019-06-01"), NA, 8,
  as.Date("2019-07-01"), 7, NA,
  as.Date("2019-08-01"), 5, NA,
  as.Date("2019-09-01"), NA, NA,
  as.Date("2019-10-01"), NA, NA
)

您可以分别确定每个时间序列的结束日期:

LastTS1Date <- with( data, max(Date[!is.na(time_series_1)])) 
LastTS2Date <- with( data, max(Date[!is.na(time_series_2)]))

然后使用 baseR 过滤器语法仅更改数据帧中那些日期之前的部分:

data[data$Date <= LastTS1Date,] <-
  data[data$Date <= LastTS1Date,] %>% fill(time_series_1)

data[data$Date <= LastTS2Date,] <-
  data[data$Date <= LastTS2Date,] %>% fill(time_series_2)