0

我有一个包含价格和数量的 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

4

1 回答 1

1

我通过电子邮件向您(以及 rhelp,尽管它尚未出现)建议您尝试:

adf <- aggregate(vol_ym1 ~ px_ym1, data=mm, sum)

如果您想匿名执行此操作,但删除您可以使用的聚合列的总和:

adf <- aggregate(mm[,-1]~mm[,1], data=mm, sum); adf

如果您想要不同的列,那么您需要创建一个函数,该函数将对按拆分标准分隔的完整向量或矩阵进行操作。你需要一个更丰富的例子来得到一个具体的答案。

于 2012-06-13T13:43:41.980 回答