如何将R中xts对象的年度数据转换为无插值同值季度数据
年度xts对象升频为季度数据解决方案
原方法失效原因
apply.quarterly和to.quarterly均为降频聚合函数,仅支持将高频数据(日、月、季度等)汇总为更低的季度频率,无法完成年度到季度的升频操作,因此输出仍为年度频率。
实现逻辑
首先生成和原年度数据时间范围匹配的季度日期序列,再将年度值批量填充到同一年的四个季度中,全程无插值运算,同年内季度值与年度值完全一致。
可运行代码
library(xts) # 1. 提取原数据起止年份 start_year <- as.numeric(format(index(x)[1], "%Y")) end_year <- as.numeric(format(index(x)[nrow(x)], "%Y")) # 2. 生成目标季度末日期序列 quarter_index <- seq.Date( from = as.Date(paste0(start_year, "-03-31")), to = as.Date(paste0(end_year, "-12-31")), by = "quarter" ) # 3. 初始化季度xts对象 x_quarter <- xts(matrix(nrow = length(quarter_index), ncol = ncol(x)), order.by = quarter_index) colnames(x_quarter) <- colnames(x) # 4. 按年份匹配填充数据 for (y in start_year:end_year) { year_data <- coredata(x[as.character(y)]) x_quarter[as.character(y)] <- matrix(rep(year_data, 4), ncol = ncol(x), byrow = TRUE) }
输出效果示例
以1996年数据为例,输出的前4行结果如下,四个季度值与原年度值完全一致:
Cons_gov FBKF 1996-03-31 0.1975085 0.1864072 1996-06-30 0.1975085 0.1864072 1996-09-30 0.1975085 0.1864072 1996-12-31 0.1975085 0.1864072
内容的提问来源于stack exchange,提问作者Alexandre Sanches
相关产品推荐
相关产品推荐

