在R中填充缺失值时间序列数据

在R中填充缺失值时间序列数据,r,time-series,dplyr,zoo,missing-data,R,Time Series,Dplyr,Zoo,Missing Data,我试图将面板数据中的年度值扩展为年度-季度值。也就是说,将年度值重复到每个季度。 例如,我希望获得2000年第一季度、2000年第二季度、2000年第三季度、2000年第四季度、2001年第一季度的重复收入值,2001年第四季度。因此,数据框架将是id、年季度和收入 我使用两步方法,但有一些问题需要处理。如果缺少季度起始值,那么我也需要删除季度起始值(NA) 案例1: annual_data <- data.frame( person=c(1, 1, 1, 2, 2,2), year=c(

我试图将面板数据中的年度值扩展为年度-季度值。也就是说,将年度值重复到每个季度。 例如,我希望获得2000年第一季度、2000年第二季度、2000年第三季度、2000年第四季度、2001年第一季度的重复收入值,2001年第四季度。因此,数据框架将是id、年季度和收入

我使用两步方法,但有一些问题需要处理。如果缺少季度起始值,那么我也需要删除季度起始值(NA)

案例1:

annual_data <- data.frame(
person=c(1, 1, 1, 2, 2,2),
year=c(2010, 2011, 2012, 2010, 2011, 2012),
income=c(4, 10, 13, 1, NA, 30)
)

有没有想过我在哪里失踪

对于案例1,您在您的
组中错过了年份
。由于使用了您拥有的代码,因此
na.locf
的分组认为
year
na.locf
必须运行的分组的一部分

testdata <- quarterlydata %>% 
  group_by(person, year) %>% 
  mutate(ynew=zoo::na.locf(income, na.rm=FALSE))
对于情况2,正如您可能已经从上面的代码推断的那样,您必须将
na.rm
设置为
FALSE
,否则向量将删除它无法推断的所有
na

因此,使用与案例2完全相同的代码,我们将得到以下输出:

> tail(testdata, 13)
Source: local data frame [13 x 5]
Groups: person, year

   quarter year person income ynew
1        4 2012      1     NA   13
2        1 2010      2      1    1
3        2 2010      2     NA    1
4        3 2010      2     NA    1
5        4 2010      2     NA    1
6        1 2011      2     NA   NA
7        2 2011      2     NA   NA
8        3 2011      2     NA   NA
9        4 2011      2     NA   NA
10       1 2012      2     30   30
11       2 2012      2     NA   30
12       3 2012      2     NA   30
13       4 2012      2     NA   30
> tail(testdata, 13)
Source: local data frame [13 x 5]
Groups: person, year

   quarter year person income ynew
1        4 2012      1     NA   13
2        1 2010      2     NA   NA
3        2 2010      2     NA   NA
4        3 2010      2     NA   NA
5        4 2010      2     NA   NA
6        1 2011      2     NA   NA
7        2 2011      2     NA   NA
8        3 2011      2     NA   NA
9        4 2011      2     NA   NA
10       1 2012      2     30   30
11       2 2012      2     NA   30
12       3 2012      2     NA   30
13       4 2012      2     NA   30
 Error: incompatible size (%d), expecting %d (the group size) or 1.
testdata <- quarterlydata %>% 
  group_by(person, year) %>% 
  mutate(ynew=zoo::na.locf(income, na.rm=FALSE))
> tail(testdata, 13)
Source: local data frame [13 x 5]
Groups: person, year

   quarter year person income ynew
1        4 2012      1     NA   13
2        1 2010      2      1    1
3        2 2010      2     NA    1
4        3 2010      2     NA    1
5        4 2010      2     NA    1
6        1 2011      2     NA   NA
7        2 2011      2     NA   NA
8        3 2011      2     NA   NA
9        4 2011      2     NA   NA
10       1 2012      2     30   30
11       2 2012      2     NA   30
12       3 2012      2     NA   30
13       4 2012      2     NA   30
> tail(testdata, 13)
Source: local data frame [13 x 5]
Groups: person, year

   quarter year person income ynew
1        4 2012      1     NA   13
2        1 2010      2     NA   NA
3        2 2010      2     NA   NA
4        3 2010      2     NA   NA
5        4 2010      2     NA   NA
6        1 2011      2     NA   NA
7        2 2011      2     NA   NA
8        3 2011      2     NA   NA
9        4 2011      2     NA   NA
10       1 2012      2     30   30
11       2 2012      2     NA   30
12       3 2012      2     NA   30
13       4 2012      2     NA   30