R: Как работать с временными рядами субчасовых данных?

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

    Date        Time        T1
 1  2014-05-22  15:15:00    21.6
 2  2014-05-22  15:20:00    21.2
 3  2014-05-22  15:25:00    21.3
 4  2014-05-22  15:30:00    21.5
 5  2014-05-22  15:35:00    21.1
 6  2014-05-22  15:40:00    21.5

Поскольку я не хотел работать с половиной дня, я удалил первый и последний день из фрейма данных. Поскольку R распознавал не дату и время как таковые, а как «фактор», я использовал библиотеку lubridate, чтобы правильно изменить ее. Теперь это выглядит так:

    Date        Time    T1
1   2014-05-23      0S  14.2
2   2014-05-23  5M 0S   14.1
3   2014-05-23  10M 0S  14.6
4   2014-05-23  15M 0S  14.3
5   2014-05-23  20M 0S  14.4
6   2014-05-23  25M 0S  14.5

Теперь действительно начинаются проблемы. Использование функции ts изменяет дату на 16944 и время на 0. Как настроить фрейм данных с правильной датой начала и частотой? Новый набор данных поступает каждые 5 минут, поэтому частота должна быть 288. Я также попытался установить дату начала в виде вектора. Поскольку 22 мая был 142-й день года, я попробовал это

ts_df <- ts(df, start=c(2014, 142/365), frequency=288) 

Там нет ошибки, но когда я перехожу к start(ds_df), я получаю и end(ds_df):

[1] 2013.998
[1] 2058.994

Кто-нибудь может подсказать, как работать с такими данными?


person ngn16920    schedule 02.07.2016    source источник


Ответы (1)


Класс "ts" обычно не подходит для такого типа данных. Предполагая, что DF — это кадр данных, воспроизводимый в примечании в конце этого ответа, мы преобразуем его в объект класса "zoo", а затем выполняем некоторые манипуляции. Также можно использовать связанный пакет xts.

library(zoo)

z <- read.zoo(DF, index = 1:2, tz = "")

window(z, start = "2014-05-22 15:25:00")

head(z, 3) # first 3
head(z, -3) # all but last 3
tail(z, 3) # last 3
tail(z, -3) # all but first 3

z[2:4] # 2nd, 3rd and 4th element of z

coredata(z) # numeric vector of data values
time(z) # vector of datetimes

fortify.zoo(z) # data frame whose 2 cols are (1) datetimes and (2) data values

aggregate(z, as.Date, mean) # convert to daily averaging values

ym <- aggregate(z, as.yearmon, mean) # convert to monthly averaging values
frequency(ym) <- 12 # only needed since ym only has length 1
as.ts(ym) # year/month series can be reasonably converted to ts

plot(z)

library(ggplot2)
autoplot(z)

read.zoo также можно было использовать для чтения данных из файла.

Примечание. DF используется выше в воспроизводимой форме:

DF <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "2014-05-22", 
class = "factor"), 
    Time = structure(1:6, .Label = c("15:15:00", "15:20:00", 
    "15:25:00", "15:30:00", "15:35:00", "15:40:00"), class = "factor"), 
    T1 = c(21.6, 21.2, 21.3, 21.5, 21.1, 21.5)), .Names = c("Date", 
"Time", "T1"), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6"))
person G. Grothendieck    schedule 02.07.2016
comment
Привет, Гротендик, спасибо за быстрый ответ. Мне потребовалось некоторое время, чтобы ответить снова, но вы очень помогли. - person ngn16920; 06.07.2016