如何为复制的时间序列数据填充缺失值?

How to fill the missing values for a replicated time series data?

我正在尝试用一些缺失值填充复制的时间序列数据,我尝试了几种方法,但 none 有效。

数据应该是这样的:

Year   Var
2001   1
2002   2
2003   3
2001   4
2002   5  
2001   6
2003   7

我想得到的是:

Year   Var
2001   1
2002   2
2003   3
2001   4
2002   5 
2003   NA 
2001   6
2002   NA
2003   7

我尝试 merge() 首先构建一个包含我需要的整个序列的数据框。

yearlabel <- data.frame(Year = rep(2001:2003, 3)    
df <- merge(df, yearlabel, all = T)

但是结果有 length(df)*length(yearlabel) 行。

此外,我尝试了 rowr 包中的 cbind.fill,它只是在 df 的末尾添加了 NAs。如果我使用

Map(merge, df, yearlabel, by = 'Year', all = T),

会 return:

Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column

谁能帮我解决这个问题?非常感谢!

这是 complete 的一个选项。根据 "Year" 的 'min' 值的出现创建列 'grp' 后,使用 complete 将 'Year' 从 min 扩展到 maxseqarrange 基于 'grp' 的行并删除 'grp' 列

library(tidyverse)
df1 %>%
   mutate(grp = cumsum(lag(Year  > lead(Year, default = 
                      last(Year)),default = TRUE))) %>%
   # or in this case, it can be simplified
   #mutate(grp = cumsum(Year == min(Year))) %>%
   complete(Year = min(Year):max(Year), grp) %>%
   arrange(grp) %>%
   select(-grp)
# A tibble: 9 x 2
#   Year   Var
#  <int> <int>
#1  2001     1
#2  2002     2
#3  2003     3
#4  2001     4
#5  2002     5
#6  2003    NA
#7  2001     6
#8  2002    NA
#9  2003     7

数据

df1 <- structure(list(Year = c(2001L, 2002L, 2003L, 2001L, 2002L, 2001L, 
 2003L), Var = 1:7), class = "data.frame", row.names = c(NA, -7L
  ))