Как я быстро группирую столбец времени в кадре данных в интервалы?

Принимая в R, у меня есть data.frame с первым столбцом, представляющим время (как POSIXct). Остальная часть столбцов (например, столбцы 2) числовые данные.

Я хотел бы сгруппировать время в 3-минутные интервалы. Каждый интервал будет среднее число значений, которое попадает в тот конкретный интервал.

Прямо сейчас у меня есть для цикла, который выполняет итерации через столбец времени, и генерируйте интервал на лету. Я задаюсь вопросом, существует ли более изящный способ выполнить то же самое?

Заранее спасибо.

Derek

8
задан TMS 17 April 2012 в 20:15
поделиться

2 ответа

Я думаю, что следующая команда вернет список значений, которые попадают в трехминутные интервалы. ( v - это имя фрейма данных, а datecol - имя столбца даты)

library(plyr)

v<-data.frame(datecol=as.POSIXct(c(
  "2010-01-13 03:02:38 UTC",
  "2010-01-13 03:03:14 UTC",
  "2010-01-13 03:05:52 UTC",
  "2010-01-13 03:07:42 UTC",
  "2010-01-13 03:09:38 UTC",
  "2010-01-13 03:10:14 UTC",
  "2010-01-13 03:12:52 UTC",
  "2010-01-13 03:13:42 UTC",
  "2010-01-13 03:15:42 UTC",
  "2010-01-13 03:16:38 UTC",
  "2010-01-13 03:18:14 UTC",
  "2010-01-13 03:21:52 UTC",
  "2010-01-13 03:22:42 UTC",
  "2010-01-13 03:24:19 UTC",
  "2010-01-13 03:25:19 UTC"
)), x = cumsum(runif(15)*10),y=cumsum(runif(15)*20))


dlply(v,.(cut(datecol,"3 min")),"[")
9
ответ дан 5 December 2019 в 11:22
поделиться

Пакеты zoo и xts прекрасно справляются с этой задачей и имеют обширную документацию. Вот готовый to.minutes3, но я также использовал aggregate.zoo() с пользовательскими функциями, делая то же самое вручную:

> library(xts)
> x <- xts(cumsum(abs(rnorm(20))), Sys.time()+60*(0:19))
> x
                       [,1]
2010-05-27 14:44:25  1.2870
2010-05-27 14:45:25  3.3187
2010-05-27 14:46:25  4.0976
2010-05-27 14:47:25  5.3304
2010-05-27 14:48:25  6.9415
2010-05-27 14:49:25  7.4508
2010-05-27 14:50:25  8.5281
2010-05-27 14:51:25  8.7145
2010-05-27 14:52:25  9.0120
2010-05-27 14:53:25 10.5063
2010-05-27 14:54:25 11.6312
2010-05-27 14:55:25 11.9813
2010-05-27 14:56:25 13.8883
2010-05-27 14:57:25 14.1696
2010-05-27 14:58:25 14.3269
2010-05-27 14:59:25 14.6768
2010-05-27 15:00:25 15.4926
2010-05-27 15:01:25 16.8408
2010-05-27 15:02:25 18.7739
2010-05-27 15:03:25 19.7815
> to.minutes3(x)
                     x.Open  x.High   x.Low x.Close
2010-05-27 14:44:25  1.2870  1.2870  1.2870  1.2870
2010-05-27 14:47:25  3.3187  5.3304  3.3187  5.3304
2010-05-27 14:50:25  6.9415  8.5281  6.9415  8.5281
2010-05-27 14:53:25  8.7145 10.5063  8.7145 10.5063
2010-05-27 14:56:25 11.6312 13.8883 11.6312 13.8883
2010-05-27 14:59:25 14.1696 14.6768 14.1696 14.6768
2010-05-27 15:02:25 15.4926 18.7739 15.4926 18.7739
2010-05-27 15:03:25 19.7815 19.7815 19.7815 19.7815
> 
6
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

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