【问题标题】:Obtaining or subsetting the first 5 minutes of each day of data from an xts从 xts 获取每天前 5 分钟的数据或对其进行子集化
【发布时间】:2012-04-09 13:06:40
【问题描述】:

我想从每分钟的数据中提取出每天的前 5 分钟时间序列数据,但是前 5 分钟不会在每天的同一时间发生,因此使用 xtsobj["T09:00/T09:05"] 之类的东西是行不通的,因为开始前 5 分钟的变化。即有时它从上午 9:20 或早上的其他随机时间开始,而不是上午 9 点。

到目前为止,我已经能够使用如下函数对每天的第一分钟进行子集化:

k <- diff(index(xtsobj))> 10000

xtsobj[c(1, which(k)+1)]

即在大于 10000 秒的数据中查找间隙,但从这一点到查找每天的前 5 分钟被证明更加困难,因为数据并不总是均匀分布。 IE。在第一分钟和第 5 分钟之间可能有 2 行到 5 行,因此使用类似:

xtsobj[c(1, which(k)+6)]

然后将结果绑定在一起

并不总是准确的。我希望可以使用像“第一”这样的功能,但不知道如何做这几天,也许这可能是最佳解决方案。有没有更好的方法来获取这些信息?

提前非常感谢 stackoverflow 社区。​​p>

【问题讨论】:

    标签: r time-series subset xts


    【解决方案1】:

    split(xtsobj, "days") 将为每天创建一个包含 xts 对象的列表。

    然后你可以申请head 到每一天

    lapply(split(xtsobj, "days"), head, 5)
    

    或更一般地

    lapply(split(xtsobj, "days"), function(x) {
      x[1:5, ]
    })
    

    最后,如果你愿意,你可以rbind 重逢。

    do.call(rbind, lapply(split(xtsobj, "days"), function(x) x[1:5, ]))
    

    【讨论】:

      【解决方案2】:

      你用lubridate包呢,先找出每天根据你随机变化的起点,然后使用函数minutes

      所以应该是这样的:

      five_minutes_after = starting_point_each_day + minutes(5)
      

      然后您可以使用xts 的常用子集执行以下操作:

      5_min_period = paste(starting_point_each_day,five_minutes_after,sep='/')
      
      xtsobj[5_min_period]
      

      编辑:

      @约书亚 我认为这行得通,看看这个例子:

      library(lubridate)
      x <- xts(cumsum(rnorm(20, 0, 0.1)), Sys.time() - seq(60,1200,60))
      
      starting_point_each_day= index(x[1])
      five_minutes_after = index(x[1]) + minutes(5)
      five_min_period = paste(starting_point_each_day,five_minutes_after,sep='/')
      
      x[five_min_period]
      

      在我之前的示例中,我犯了一个错误,我将 Five_min_period 放在引号之间。 那是你在指出约书亚吗?也可能不需要起点,只是:

      until5min=paste('/',five_minutes_after,sep="")
      x[until5min]
      

      【讨论】:

      • xtsobj['5_min_period'] 不起作用。您只能使用非常特定类型的字符串对 xts 对象进行子集化。
      • 我说xtsobj['5_min_period'] 不起作用,因为'5_min_period' 不是xts 可以识别的字符串。很高兴您纠正了错误。
      • 感谢@JoshuaUlrich 的评论,特别是开发一个非常有用的包。
      猜你喜欢
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      相关资源
      最近更新 更多