2010-04-09 24 views
5

I tienen una serie de tiempo de las muestras en R:R: Cálculo de deltas en una serie de tiempo

> 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 

en este ejemplo las muestras para X e Y se toman cada hora (pero el delta de tiempo no se FIX). Los valores xey están siempre creciendo (como un contador de kilometraje en un automóvil). Necesito los deltas, cuánto fue el crecimiento en el medio, algo como esto:

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 

Y también necesito los deltas por tiempo (x e y del delta, dividido por el tiempo - delta por hora)

¿Cómo haré esto en R?

Respuesta

5

Sólo tiene que utilizar diff() vez cambiado a una estructura de datos sensibles al tiempo como 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 
> 

Puede fácilmente almohadilla de la primera fila de atrás, fusionar, etc ... - ver la excelente documentación para el paquete zoo para detalles.

Cuestiones relacionadas