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

filling missing values time series data in R

我正在尝试将面板数据中的年度值扩展为年季度值。那就是将年度值重复到每个季度。 例如,我希望获得 2000Q1、2000Q2、2000Q3、2000Q4、2001Q1、...、2001Q4 年度季度的重复收入值。所以数据框将是 id,year-quarter,income。

我使用两步法,但有一些问题需要处理。如果缺少季度起始值,那么我也需要缺少季度值 (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)
)

案例二:

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, NA, NA, 30)
)

第一步,我将数据扩展到季度,如前所述:

所以使用如下函数:

expand <- function(x) {
    years <- min(x$year):max(x$year)
    quarters <- 1:4
    grid <- expand.grid(quarter=quarters, year=years)
    x$quarter <- 1
    merged <- grid %>% left_join(x, by=c('year', 'quarter'))
    merged$person <- x$person[1]
    return(merged)
   }

然后我用在

    zoo::na.locf 

    dplyr::mutate.

quarterlydata <- annual_data %>% group_by(person) %>% do(expand(.))
testdata <- quarterlydata %>% group_by(person) %>% mutate(ynew=zoo::na.locf(y))

但运气不佳,因为它从以前的非缺失值复制到所有缺失值。即,

案例 1:它复制了所有值,因此第 2 个人的收入 1 被复制到 2010 年和 2011 年。当它必须复制到 2010 年时,2011 年应该是 NAs。

对于情况 2:我得到

 Error: incompatible size (%d), expecting %d (the group size) or 1.

对我遗漏的地方有什么想法吗?

对于案例 1,您在 group_by 中遗漏了年份。由于使用了您拥有的代码,na.locf 的分组认为 yearna.locf 必须 运行 的分组的一部分。

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

对于情况 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     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