【问题标题】:Split a database by regular time intervals (6 months each = 131 days)按固定时间间隔拆分数据库(每个 6 个月 = 131 天)
【发布时间】:2018-01-29 12:44:53
【问题描述】:

我是 R 的初学者,所以如果我的问题看起来很基础,但我对所有可用于拆分数据库的函数(lubridate、split、daply ...)感到很困惑,请提前原谅我。

我的数据由 1978 年至 2017 年股市指数的每日收益组成。我想每 6 个月在 X1、X2、X3 和 X4 上回归 Y1。 作为信息,每年有 262 个观测值。所以 6 个月 = 131 个交易日。

这是我的(excel)数据库的摘录:

Date	y1	x1	x2	x3	x4
01/06/78	-0,054728735	0,062336581	-0,017447642	0,018066145	0,0137291
01/09/78	-0,0633203	0,051713026	-0,025691177	-0,006909645	-0,015750265
01/10/78	-0,048852901	0,026756766	-0,00910902	-0,013302491	-0,025715185
01/11/78	-0,049357647	0,013119868	-0,005255487	-0,008035708	-0,01565239
01/12/78	-0,044503679	-0,029061109	-0,016565941	-0,01131818	-0,008933417
01/13/78	-0,027863545	-0,044460617	-0,012819194	-0,021071992	-0,015533829
01/16/78	-0,026495125	-0,056336531	-0,007379243	-0,003360595	0,01056797
01/17/78	-0,007670981	-0,041300771	0	-0,00111657	0,019498044
01/18/78	0,000662032	-0,031227275	0,003506725	-0,018967432	-0,003861009

我认为最好的方法是 (i) 每 6 个月拆分一次我的数据库,然后 (ii) 对每 6 个月的部分进行一次线性回归。

你能告诉我这是否是最好的方法吗?如果是这种情况,你能告诉我每 6 个月拆分数据库的代码吗?

非常感谢您的帮助!

【问题讨论】:

标签: r database time split intervals


【解决方案1】:

您可以创建与数据行相对应的数字序列:

i = c(seq(1,nrow(dat),by=131),nrow(dat))

然后使用lapply拆分数据:

lapply(seq_along(i)[-length(i)],function(x) dat[i[x]:(i[x+1]-1),])

【讨论】:

  • 谢谢!代码正在运行。但我还有两个问题。 1/ 如何调用已创建的每个子集?例如,我如何在第二个或第三个子集中工作? 2/我想对我的每个子集进行回归。也许我应该再次使用 lapply 还是您认为循环更适合?
猜你喜欢
  • 2021-12-28
  • 2020-09-20
  • 1970-01-01
  • 2021-07-21
  • 2022-12-12
  • 2012-10-28
  • 2017-10-31
  • 2019-12-01
  • 2018-12-13
相关资源
最近更新 更多