R: Вычисление дельт в timeseries

У меня есть timeseries образцов в 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 всегда растут (как счетчик milage в автомобиле). Мне нужны дельты, сколько было промежуточным ростом, что-то вроде этого:

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
задан jogo 23 January 2016 в 10:10
поделиться

1 ответ

Просто используйте 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 .

5
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: