Подмножество данных временного ряда в определенные интервалы

Я пытаюсь поместить или отфильтровать данные в определенный интервал времени. Можете ли вы помочь мне разбить следующие данные на 2-минутные интервалы времени? Я посмотрел на Lubridate, split() и cut(), но не могу понять, как правильно это сделать.

Я посмотрел этот пост на SO, но, похоже, он мне не нужен.

Обратите внимание, что столбцы 1 и 2 являются классами символов, а столбец 3 - классом POSIXct. Если возможно, я бы хотел, чтобы решение использовало столбец datetime (POSIXct).

         date  time            datetime use..kW.     gen..kW. Grid..kW.
120 12/31/2013 21:59 2013-12-31 21:59:00 1.495833 -0.003083333  1.495833
121 12/31/2013 21:58 2013-12-31 21:58:00 1.829583 -0.003400000  1.829583
122 12/31/2013 21:57 2013-12-31 21:57:00 1.977283 -0.003450000  1.977283
123 12/31/2013 21:56 2013-12-31 21:56:00 2.494750 -0.003350000  2.494750
124 12/31/2013 21:55 2013-12-31 21:55:00 2.218283 -0.003500000  2.218283
125 12/31/2013 21:54 2013-12-31 21:54:00 2.008283 -0.003566667  2.008283
126 12/31/2013 21:53 2013-12-31 21:53:00 2.010917 -0.003600000  2.010917
127 12/31/2013 21:52 2013-12-31 21:52:00 2.011867 -0.003583333  2.011867
128 12/31/2013 21:51 2013-12-31 21:51:00 2.015033 -0.003600000  2.015033
129 12/31/2013 21:50 2013-12-31 21:50:00 2.096550 -0.003850000  2.096550

Новое подмножество будет просто брать данные из каждого двухминутного интервала и выглядеть так:

      date  time            datetime use..kW.     gen..kW. Grid..kW.
121 12/31/2013 21:58 2013-12-31 21:58:00 1.829583 -0.003400000  1.829583
123 12/31/2013 21:56 2013-12-31 21:56:00 2.494750 -0.003350000  2.494750
125 12/31/2013 21:54 2013-12-31 21:54:00 2.008283 -0.003566667  2.008283
127 12/31/2013 21:52 2013-12-31 21:52:00 2.011867 -0.003583333  2.011867
129 12/31/2013 21:50 2013-12-31 21:50:00 2.096550 -0.003850000  2.096550

Для моих данных я собираюсь делать 5- и 15-минутные интервалы. Но если я получу хорошее решение для данных выше и с 2-минутным интервалом, я должен быть в состоянии соответствующим образом скорректировать код в соответствии со своими потребностями.

1 ответ

Решение

С помощью cut а также plyr::ddply:

groups <- cut(as.POSIXct(df$datetime), breaks="2 min")
library(plyr)
ddply(df, "groups", tail, 1)[, -1]
#         date  time            datetime use..kW.     gen..kW. Grid..kW.
# 1 12/31/2013 21:50 2013-12-31 21:50:00 2.096550 -0.003850000  2.096550
# 2 12/31/2013 21:52 2013-12-31 21:52:00 2.011867 -0.003583333  2.011867
# 3 12/31/2013 21:54 2013-12-31 21:54:00 2.008283 -0.003566667  2.008283
# 4 12/31/2013 21:56 2013-12-31 21:56:00 2.494750 -0.003350000  2.494750
# 5 12/31/2013 21:58 2013-12-31 21:58:00 1.829583 -0.003400000  1.829583

Или же

arrange(ddply(df, "groups", tail, 1)[, -1], datetime, decreasing=TRUE)

если вы хотите отсортировать все наоборот.

Другие вопросы по тегам