我有一个包含价格和数量的 xts 对象。我想按时间段拆分数据并汇总数据,以便获得每个时间段拆分的每个价格的交易量表。
我已经破解了一个部分解决方案,但它笨重且缓慢;而且我无法使用模板名称使其工作(因此我无法使我的功能工作)。
xts 对象的子集如下所示:
library(xts)
mn <-
structure(c(97.9, 97.9, 97.9, 97.9, 97.9, 97.9, 97.9, 97.89,
97.89, 97.89, 97.89, 97.89, 97.89, 97.9, 97.9, 97.89, 97.9, 97.89,
97.89, 97.89, 97.89, 9, 60, 71, 5, 3, 21, 5, 192, 65, 73, 1,
1, 39, 15, 1, 1, 18, 1, 33, 1, 1), .Dim = c(21L, 2L), .Dimnames = list(
NULL, c("px_ym1", "vol_ym1")), index = structure(c(1338561000,
1338561000, 1338561000, 1338561000, 1338561000, 1338561000, 1338561060,
1338561060, 1338561060, 1338561060, 1338561060, 1338561060, 1338561060,
1338561060, 1338561060, 1338561060, 1338561060, 1338561060, 1338561120,
1338561240, 1338561240), tzone = "", tclass = c("POSIXct", "POSIXt"
)), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct",
"POSIXt"), .indexTZ = "", tzone = "", class = c("xts", "zoo"))
我已经弄清楚如何使用以下命令进行聚合:
PxMat <- aggregate(.~px_ym1, data=mn, sum)
px_ym1 vol_ym1
1 97.89 408
2 97.90 208
对于子集,我使用以下分组:
PxMat2 <- aggregate(.~px_ym1, data=mn[.indexmin(mn) == '30'], sum)
px_ym1 vol_ym1
1 97.9 169
我有四个具体问题:
1/ 我的数据集非常庞大,所以速度是个问题。这是子集和聚合 xts 的最快方法吗?
2/有没有办法为多次拆分做到这一点?说每分钟、每天、每周或每月的表格?
我正在编写一个带有循环的函数,该函数将生成一个表格,该表格报告指定时间分割的每种情况下每个价格的交易量(例如四个表格,示例数据中每分钟一个)。它看起来很慢,就像有人已经做得更好的事情。是这样吗?
3/ 有没有办法使用模板变量进行子设置?我想获得带有多个数据框的命名聚合函数(上面重现)的表,因为列名会不时不同。
我努力了:
PxMat <- aggregate(.~mn[,1], data=mn, sum)
px_ym1 px_ym1 vol_ym1
1 97.90 1076.79 408
2 97.89 979.00 208
这不是一场灾难,但如果有多个列,我希望将混乱降至最低。我无法弄清楚如何抑制价格系列的聚合。
4/ 在相关说明中,是否可以对不同的数据列应用不同的功能?例如,如果返回的表是:
px_ym1 count vol_ym1
1 97.90 11 408
2 97.89 10 208
在 R-help 上交叉发布:https ://stat.ethz.ch/pipermail/r-help/2012-June/315499.html