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

时间:2019-01-15 13:05:17

标签: r merge missing-data

我正在尝试使用一些缺少的值填充复制的时间序列数据,并且尝试了服务器方法,但是没有一种方法。

数据应如下所示:

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)行。

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

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

它将返回:

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

有人可以帮助我解决这个问题吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

这是complete的一个选项。根据“年”的“最小”值的出现创建列“ grp”后,使用complete将{年份}从min扩展到max,{{1} },seq基于'grp'的行,并删除'grp'列

arrange

数据

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