Анализ временных рядов в R (со временем)

Я новичок в Р.

У меня есть набор данных:

  meter    measurement    datetime                value
1 tv       EnergyUsed     2015-04-27  12:29:48    0.0
2 tv       EnergyUsed     2015-04-27  12:29:48    0.0
3 tv       EnergyUsed     2015-04-27  12:31:48    0.0
4 tv       EnergyUsed     2015-04-27  12:41:48    0.0
5 tv       EnergyUsed     2015-04-27  13:01:48    0.0

И я хочу сделать несколько подмножеств:

  1. Подмножества отфильтрованы за месяц (все данные, например, за апрель)

  2. Подмножество отфильтровано за день (таким образом, все данные за каждый день)

Я пробовал несколько вещей (это не работает) и много гуглил:

  • energy <- filter(dataset, datetime == "2015-04") (что приводит к «нет данных»)
  • Я нашел это «решение» (Среднее годовое, месячное или дневное для нерегулярные временные ряды) Но проблема в том, что у меня 60 700 записей.. так что было бы здорово, если бы этот процесс выполнялся автоматически
  • Я нашел несколько других решений, но они использовали только дату (без времени). Время тоже можно убрать, но оно в одной колонке с датой.

Я надеюсь, что это не дубликат, потому что другие источники не помогут. Если что-то непонятно, пожалуйста, дайте мне знать. Я только начинаю с Р.


person Community    schedule 20.04.2016    source источник
comment
Я сделал так: один$день ‹- дни недели(как.Date(one$datetime)) один$месяц ‹- месяц(как.Date(one$datetime))   -  person    schedule 20.04.2016
comment
Не оптимально, но теперь я могу видеть дни и месяцы... к сожалению, не каждый день месяца, а только каждый день недели   -  person    schedule 20.04.2016


Ответы (2)


Чтобы разделить ваши данные по месяцам, дням или дням недели, лучше всего преобразовать столбцы в класс даты/времени. Предполагая, что вы читаете свои данные в фрейме данных (с именем df) из файла .csv, тогда их дата-время, скорее всего, является строкой символов. Чтобы преобразовать в класс даты/времени:

df$datetime <- as.POSIXct(df$datetime, format="%Y-%m-%d %H:%M:%S")

Как только столбец находится в классе POSIX, вы можете подмножество с помощью

months(df$datetime)
weekdays(df$datetime)

Я предлагаю прочитать страницы справки и изучить POSIXct, POSIXlt, strptime, cut.POSIXt для начала.
R может показаться немного причудливым в отношении дат и времени, но как только вы привыкнете к нему, это очень мощная функция.

person Dave2e    schedule 20.04.2016

Преобразуйте дату и время как дату

(x<-as.Date(dat$datetime))
[1] "2015-04-27" "2015-04-27" "2015-04-27" "2015-04-27" "2015-04-27"

(1) Вставьте поле месяца в свой набор данных и подмножество по месяцам

dat$mm <- format(x, "%m")
subset(dat, mm=="04")
  meter measurement            datetime value   yyyymmdd mm
1    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04
2    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04
3    tv  EnergyUsed 2015-04-27 12:31:48     0 2015-04-27 04
4    tv  EnergyUsed 2015-04-27 12:41:48     0 2015-04-27 04
5    tv  EnergyUsed 2015-04-27 13:01:48     0 2015-04-27 04

(2) Вставьте комбинированное поле ггммдд и подмножество по определенному дню

dat$day <- format(x, "%y%m%d")
subset(dat, day=="150427")

  meter measurement            datetime value   yyyymmdd mm    day
1    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04 150427
2    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04 150427
3    tv  EnergyUsed 2015-04-27 12:31:48     0 2015-04-27 04 150427
4    tv  EnergyUsed 2015-04-27 12:41:48     0 2015-04-27 04 150427
5    tv  EnergyUsed 2015-04-27 13:01:48     0 2015-04-27 04 150427
person Adam Quek    schedule 20.04.2016