我有一个包含价格和数量的xts对象。我希望按时间段分割数据并汇总数据,以便获得每个时间段分段的每个价格交易的交易量表。子设置和聚合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-帮助:https://stat.ethz.ch/pipermail/r-help/2012-June/315499.html
对于交叉发布感到抱歉。我显然是新来的,而且我没有想到这是礼节。我刚刚搜索了跨栏发表礼物,现在明白规则是不可以的。 – ricardo
你今天也问过关于datatable-help的类似问题吗? –
是的,这是基本问题。我试图加快我的功能,并使其更通用,并考虑切换到data.table以获得步伐。在这个阶段,data.table更好地处理聚合步骤(这是将此作为通用函数所需的),但基于时间的子设置对于我来说还不适用(我想我已经做了一个简单的错误,因为你的方法是新颖的)。我想做一个公平的比较,所以我想我会问xts专家。 – ricardo