2010-04-09 24 views
5

bir timeseries Hesaplanması delta: x ve y için, bu örnek örneklerindeR: I, R numune bir timeseries sahip

> 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 

her saat alınır (ancak zaman ö sabit değildir). x ve y değerleri daima büyüyor (arabada bir milaj sayacı gibi). Ben deltalar, gerek arasındaki büyüme, böyle bir şey ne kadar:

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 

Ve ayrıca deltalar zaman başına (x ve süresine bölünmesiyle y delta - Saatte delta) ihtiyaç

Bunu R'de nasıl yapabilirim?

cevap

5

Sadece diff() kullanmak kez zoo gibi bir zaman farkında veri yapısına geçiş:

> 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 
> 

Kolayca ped ilk satır geri birleştirebilirsiniz, ... vb - paketinin zoo için mükemmel belgelere bakın detaylar için.