用已建立的值填充时间序列,如果尚未找到值,则保留 NA

Fill Timeseries with founded values or keep NA if no value was found yet

我有一个较长的 TimeSeries 并为了预测目的将其变宽,目前时间序列具有以下结构:

Day Value Strength1 Strength2 Strength3
1/2 1.356 3 NA NA
2/2 1.385 NA NA NA
3/2 1.385 NA 1.01 NA
4/2 1.4 NA NA 10
5/2 1.6 NA NA NA
6/2 1.7 4 NA NA
7/2 1.8 NA 1.05 NA
8/2 1.88 NA NA NA
9/2 1.98 NA NA 11
10/2 1.8 NA NA NA

我想要一个函数:

这将是结果:

Day Value Strength1 Strength2 Strength3
1/2 1.356 3 NA NA
2/2 1.385 3 NA NA
3/2 1.385 3 1.01 NA
4/2 1.4 3 1.01 10
5/2 1.6 3 1.01 10
6/2 1.7 4 1.01 10
7/2 1.8 4 1.05 10
8/2 1.88 4 1.05 10
9/2 1.98 4 1.05 11
10/2 1.8 4 1.05 11

我试过这个功能,但不对:

filler <- function(df) {
  col <- colnames(df)
  one <- NA
  for (i in col) {
    for (a in i) {
      if(!is.na(a)) {
        one = a
      }
      if(!is.na(one) & is.na(a)) {
        a = one
      }
    }
  }
} 

您可以使用 tidyr::fill -

filler <- function(data) tidyr::fill(data, dplyr::everything())
filler(df)

#    Day Value Strength1 Strength2 Strength3
#1   1/2 1.356         3        NA        NA
#2   2/2 1.385         3        NA        NA
#3   3/2 1.385         3      1.01        NA
#4   4/2 1.400         3      1.01        10
#5   5/2 1.600         3      1.01        10
#6   6/2 1.700         4      1.01        10
#7   7/2 1.800         4      1.05        10
#8   8/2 1.880         4      1.05        10
#9   9/2 1.980         4      1.05        11
#10 10/2 1.800         4      1.05        11