在 R 或 Matlab 中将数据集从每日数据转换为季度数据

问题描述 投票:0回答:1

我有一个数据集(政府债券收益率),从 1971 年初到 2023 年,按日计算(其中 360 列,每个到期日一列)。

现在,在我的研究中,我需要将每日数据(数据集显然很大)转换为季度数据。

显然,这用手是不可行的,因此我的问题是;有谁知道如何将 R 或 Matlab 中的每日数据转换为季度数据?

我附上了一张图片作为 Excel 数据的摘要,以备需要时使用(其中 m 表示成熟度)

非常感谢任何帮助,提前致谢!

致以诚挚的问候:-)

另外,我也尝试过R;加载数据看起来很容易;然而,在 R 中定义序列相当棘手,因为所有年份都包含不同的数据长度(例如 1970 年的数据有 249 个观测值,而 2023 年有 250 个观测值,依此类推)

r matlab
1个回答
0
投票

样本数据。我假设您的

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
© www.soinside.com 2019 - 2024. All rights reserved.