在 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
的分组认为 year
是 na.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
我正在尝试将面板数据中的年度值扩展为年季度值。那就是将年度值重复到每个季度。 例如,我希望获得 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
的分组认为 year
是 na.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