【问题标题】:R: Calculating deltas in a timeseriesR:计算时间序列中的增量
【发布时间】:2011-02-06 07:41:05
【问题描述】:

我在 R 中有一个时间序列的样本:

> str(d)
 'data.frame': 5 obs. of  3 variables:
 $ date: POSIXct, format: "2010-03-04 20:47:00" "2010-03-04 21:47:00" ...
 $ x   : num  0 10 11 15.2 20
 $ y   : num  0 5 7.5 8.4 12.5
> d
                 date    x    y
1 2010-03-04 20:47:00  0.0  0.0
2 2010-03-04 21:47:00 10.0  5.0
3 2010-03-04 22:47:00 11.0  7.5
4 2010-03-04 23:47:00 15.2  8.4
5 2010-03-05 00:47:00 20.0 12.5

在此示例中,x 和 y 的样本每小时采集一次(但时间增量不固定)。 x 和 y 值始终在增长(就像汽车中的里程计数器)。我需要三角洲, 两者之间的增长是多少,如下所示:

1 2010-03-04 20:47:00  0.0  0.0
2 2010-03-04 21:47:00 10.0  5.0
3 2010-03-04 22:47:00 1.0   2.5
4 2010-03-04 23:47:00 4.2   0.9
5 2010-03-05 00:47:00 4.8   4.1

而且我还需要每次的增量(x 和 y 增量,除以时间 - 每小时增量)

我将如何在 R 中做到这一点?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    一旦切换到像zoo这样的时间感知数据结构,只需使用diff()

    > library(zoo)
    > DF <- data.frame(date=Sys.time() + 0:4*3600, x = cumsum(runif(5)*10), 
                                                   y=cumsum(runif(5)*20))
    > DF
                     date       x      y
    1 2010-04-09 15:14:54  9.6282 14.709
    2 2010-04-09 16:14:54 12.4041 28.665
    3 2010-04-09 17:14:54 18.1643 34.244
    4 2010-04-09 18:14:54 27.5785 41.028
    5 2010-04-09 19:14:54 33.2779 57.020
    > zdf <- zoo(DF[,-1], order.by=DF[,1])
    > diff(zdf)
                             x       y
    2010-04-09 16:14:54 2.7759 13.9556
    2010-04-09 17:14:54 5.7602  5.5792
    2010-04-09 18:14:54 9.4142  6.7844
    2010-04-09 19:14:54 5.6995 15.9919
    > 
    

    您可以轻松地将第一行向后填充、合并等等——有关详细信息,请参阅包 zoo 的优秀文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多