2010-04-09 169 views
5

我有樣本的時間序列中R: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中做到這一點?

回答

5

只需使用diff()一旦切換到時間感知的數據結構像zoo

> 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了出色的文件瞭解詳情。