我正在尝试将我的面板数据中的年度值扩展到年度季度值 . 这是每个季度重复的年度值 . 例如,我希望获得2000Q1,2000Q2,2000Q3,2000Q4,2001Q1,......,2001Q4的年度收入的重复值 . 因此数据框将是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)
)
案例2:
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)
)
在第一步中,我将数据扩展到季度,如上所述:interpolating in R yearly time series data with quarterly values
所以使用如下函数:
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:它复制了所有 Value ,因此第2人的收入1被复制到2010年和2011年 . 当必须复制到2010年时,2011年应该是NAs .
案例2:我明白了
Error: incompatible size (%d), expecting %d (the group size) or 1.
有关我失踪的地方的任何想法?
1 回答
对于案例1,您错过了
group_by
中的年份 . 由于使用了您拥有的代码,na.locf
的分组认为year
是na.locf
必须运行的分组的一部分 .随着输出:
对于案例2,正如您可能已经从上面的代码中推断出的那样,您必须将
na.rm
设置为FALSE
,否则向量将丢弃所有无法推断的NA
.因此,对于案例2使用完全相同的代码,我们将得到输出: