我有一个数据集(政府债券收益率),从 1971 年初到 2023 年,按日计算(其中 360 列,每个到期日一列)。
现在,在我的研究中,我需要将每日数据(数据集显然很大)转换为季度数据。
显然,这用手是不可行的,因此我的问题是;有谁知道如何将 R 或 Matlab 中的每日数据转换为季度数据?
我附上了一张图片作为 Excel 数据的摘要,以备需要时使用(其中 m 表示成熟度)
非常感谢任何帮助,提前致谢!
致以诚挚的问候:-)
另外,我也尝试过R;加载数据看起来很容易;然而,在 R 中定义序列相当棘手,因为所有年份都包含不同的数据长度(例如 1970 年的数据有 249 个观测值,而 2023 年有 250 个观测值,依此类推)
样本数据。我假设您的
time
是整数编码的日期。
library(dplyr)
set.seed(42)
dat <- tibble(id=1:366, time=as.integer(format(as.Date("1971-01-04")+0:365, format="%Y%m%d")), m1=runif(366), m2=rnorm(366), m3=runif(366))
dat
# # A tibble: 366 × 5
# id time m1 m2 m3
# <int> <int> <dbl> <dbl> <dbl>
# 1 1 19710104 0.915 0.295 0.916
# 2 2 19710105 0.937 -0.279 0.564
# 3 3 19710106 0.286 -1.34 0.0592
# 4 4 19710107 0.830 0.701 0.673
# 5 5 19710108 0.642 0.554 0.627
# 6 6 19710109 0.519 -0.836 0.0729
# 7 7 19710110 0.737 -1.59 0.438
# 8 8 19710111 0.135 0.205 0.642
# 9 9 19710112 0.657 -0.345 0.810
# 10 10 19710113 0.705 0.253 0.392
# # ℹ 356 more rows
# # ℹ Use `print(n = ...)` to see more rows
季度总结。
dat |>
mutate(
time = as.Date(as.character(time), format="%Y%m%d"),
year = format(time, format = "%Y"),
qtr = lubridate::quarter(time)
) |>
summarize(.by = c(year, qtr), across(m1:m3, ~ mean(.x)))
# # A tibble: 5 × 5
# year qtr m1 m2 m3
# <chr> <int> <dbl> <dbl> <dbl>
# 1 1971 1 0.532 -0.0544 0.492
# 2 1971 2 0.518 -0.0185 0.546
# 3 1971 3 0.473 0.00769 0.483
# 4 1971 4 0.464 -0.00148 0.464
# 5 1972 1 0.621 0.401 0.458