2014-01-30 2 views
0

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

Мои данные представляют собой таблицу через readcsv с датой и временем в одном столбце и несколькими другими столбцами со значениями. Временные шаги в данных не постоянны, поэтому иногда 5 минут, иногда 2 часа. Например.

2014-01-25 14:50:00, 4, 8 
2014-01-25 14:55:00, 3, 7 
2014-01-25 15:00:00, 1, 4 
2014-01-25 15:20:24, 12, 34 
2014-01-25 17:19:00, 150, 225 
2014-01-25 19:00:00, 300, 400 
2014-01-25 21:00:00, NA, NA 
2014-01-25 23:19:00, 312, 405 

Так я смотрю на осреднения сюжет, который

  1. вычисляет средние данные в произвольных интервалов, как 30 минут, 1 час, 1 день и т.д. Таким образом, нижние ступени должны быть агрегированными и выше шаги должны дезагрегироваться.
  2. (удалено, так как тривиально получить значение в час из временного ряда D, усредненного на X часов с D/x.)
  3. данные, помеченные как NA, не должны приниматься во внимание. Таким образом, функция не должна интерполировать/сглаживать пробелы Na, а выполнение линейного графика не должно связывать точки между разрывом NA с линией.

Я уже пытался

aggregate(list(value1=data$value1,value2=data$value2), list(time=cut(data$time, "1 hour")), sum) 

, но это не удовлетворяет потребности 1 и 3, и не в состоянии детализировать 2-часовые действия данных.

+0

Можете ли вы поднять образец вашей информационной рамки или ссылку на данные? – John

+0

Можете ли вы определить «значение в час» и объяснить, как это отличается от среднего? Что касается пункта 3, большинство функций «R» имеют аргумент 'na.rm' или' na.omit', который удаляет «NA» из расчета, но неясно, что вы подразумеваете под «не соединять точки». –

+0

Я попытался объяснить больше в этом редактировании. Выполнение простого среднего не суммирует/дезагрегирует должным образом, когда временные шаги не являются постоянными. – Martin

ответ

0

Ответ на сообщение 3: plot автоматически пропускает NA значения и разрывает линию.

Попробуйте этот пример:

plot(c(1:5,NA,NA,6:10),t='l') 

Теперь, если вы хотите «гладкие» или средние с течением времени интервалов чисто для графических целей, это, вероятно, проще всего начать с разделения данных в каждой строке с NA а затем выполнять сплайн или другую операцию сглаживания по каждому подразделу отдельно.

+0

Спасибо, но поскольку данные представляют собой огромное количество строк с произвольно распределенными линиями NA, нецелесообразно выполнять секвенциальное усреднение вручную. Но ваш пример показывает, что линейный сюжет не будет соединяться через пробелы NA, поэтому я думаю, что проблема решена, как только кто-то знает решение для точки 1. – Martin

+0

Возможно, просто выполнение 'rollmean' решит точку 1? –

+0

документация rollmean: «k: целочисленная ширина окна прокатки». Поскольку у меня есть временные шаги различной длины, это не кажется правильным. Вот почему я спрашиваю. – Martin