R还是比较新的我最近一直在使用R + tydiverse来分析财务(日内)时间序列数据,以收集一些统计数据来帮助我做出交易决策。
我还没有在R中找到一个好的解决方案,就是如何测试顺序事件 例如,如果我想知道在X发生之后和Z发生之前事件Y发生的概率(事件是变量的值,即价格达到某个值),R中是否有任何好的库或方法来实现这一目标?
例如,如果我有一个简单的
tribble(
~t, ~price, ~level1, ~level2, ~level3,
as.POSIXct(strptime("2011-03-27 08:00:00", "%Y-%m-%d %H:%M:%S")), 5, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 09:00:00", "%Y-%m-%d %H:%M:%S")), 7, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 10:00:00", "%Y-%m-%d %H:%M:%S")), 9, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 11:00:00", "%Y-%m-%d %H:%M:%S")), 0, 6, 8, 0
)
我希望在 price > level1
之前测试price > level 2
然后 price <= level3
(此数据示例中为true),是否存在在R?
答案 0 :(得分:1)
lead
和lag
对此非常有用,请在此处查看一些dplyr说明:Lead and lag.如果您有多个股票或想要仅在日内使用,lead
和lag
尊重这些group_by(stock)
或group_by(day)
(一旦您恰当地定义了这些内容。但!如果您的数据缺少一小时(例如9:00:00
您的数据集中遗失了},潜在客户将从08:00:00
跳到10:00:00
,这可能不是您想要的。
df <- tribble(
~t, ~price, ~level1, ~level2, ~level3,
as.POSIXct(strptime("2011-03-27 08:00:00", "%Y-%m-%d %H:%M:%S")), 5, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 09:00:00", "%Y-%m-%d %H:%M:%S")), 7, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 10:00:00", "%Y-%m-%d %H:%M:%S")), 9, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 11:00:00", "%Y-%m-%d %H:%M:%S")), 0, 6, 8, 0
)
df %>% filter(price > level1 & lead(price) > level2 & lead(price, 2) <= level3)
t price level1 level2 level3
<dttm> <dbl> <dbl> <dbl> <dbl>
1 2011-03-27 09:00:00 7 6 8 0
还有'时间感知'tidyverse风格包可以帮助解决这个问题(但我没有太多经验):https://business-science.github.io/tibbletime/和其他我不记得的。
另请阅读Hadley Wickham的免费在线书籍R4DS的nycflights部分:dates and times和model building。