【问题标题】:Intraday high/low clustering日内高/低聚类
【发布时间】:2012-10-11 09:29:23
【问题描述】:

我正在尝试对基于时间的高点/低点聚类进行研究。我设法通过在盘中数据上使用to.daily 并使用以下方法合并两者来实现上述目标:

intraday.merge <- merge(intraday,daily)
intraday.merge <- na.locf(intraday.merge)
intraday.merge <- intraday.merge["T08:30:00/T16:30:00"] # remove record at 00:00:00

接下来,我尝试使用以下方法获取 high == daily.high/low == daily.low 的记录:

intradayhi <- test[test$High == test$Daily.High]
intradaylo <- test[test$Low == test$Daily.Low]

生成的数据类似于以下内容:

                     Open  High   Low Close Volume Daily.Open Daily.High Daily.Low Daily.Close Daily.Volume
2012-06-19 08:45:00 258.9 259.1 258.5 258.7   1424      258.9      259.1     257.7       258.7        31523
2012-06-20 13:30:00 260.8 260.9 260.6 260.6   1616      260.4      260.9     259.2       260.8        35358
2012-06-21 08:40:00 260.7 260.8 260.4 260.5    493      260.7      260.8     257.4       258.3        31360
2012-06-22 12:10:00 255.9 256.2 255.9 256.1    626      254.5      256.2     253.9       255.3        50515
2012-06-22 12:15:00 256.1 256.2 255.9 255.9    779      254.5      256.2     253.9       255.3        50515
2012-06-25 11:55:00 254.5 254.7 254.4 254.6   1589      253.8      254.7     251.5       253.9        65621
2012-06-26 08:45:00 253.4 254.2 253.2 253.7   5849      253.8      254.2     252.4       253.1        70635
2012-06-27 11:25:00 255.6 256.0 255.5 255.9    973      251.8      256.0     251.8       255.2        53335
2012-06-28 09:00:00 257.0 257.3 256.9 257.1    601      255.3      257.3     255.0       255.1        23978
2012-06-29 13:45:00 253.0 253.4 253.0 253.4    451      247.3      253.4     246.9       253.4        52539

使用子集有重复结果,如何只实现当天的第一条记录?然后我就可以绘制一天中各个时段的记录数。

另外,是否有其他方法可以获得我想要的结果?提前致谢。

编辑:

示例输出应如下所示,计数可以是当天的第一个结果或汇总(当天出现超过 1 次):

Time        Count
08:40:00    60
08:45:00    54
08:50:00    60
...
14:00:00    20
14:05:00    12
14:10:00    30

【问题讨论】:

  • 如果您展示您理想的解决方案是什么样的,它可能会有所帮助。在您提供的示例数据中,您是否希望摆脱“2012-06-22 12:15:00”行?或者将其与“2012-06-22 12:10:00”行合并?还是别的什么?

标签: r xts


【解决方案1】:

您可以通过以下方式获得每天的第一个观察结果:

y <- apply.daily(x, first)

然后您可以简单地根据小时和分钟汇总计数:

z <- aggregate(1:NROW(y), by=list(Time=format(index(y),"%H:%M")), sum)

【讨论】:

  • 感谢您的回复,肯定胜过我的解决方案:lo &lt;- transform(as.POSIXlt(index(intradaylo))$hour * 60 + as.POSIXlt(index(intradaylo))$min,foo=1) 然后在绘图前对结果进行分箱。但是,我通过执行以下操作引入了一个新列,因为我没有使用上述聚合函数获得行的总和:lo$Count &lt;- 1 lo &lt;- aggregate(lo$Count,by=list(time=format(index(lo),"%H:%M")),sum)
猜你喜欢
  • 2012-12-09
  • 2015-06-28
  • 1970-01-01
  • 2021-03-23
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2012-01-02
相关资源
最近更新 更多