Разделить временные ряды данных на временные интервалы (скажем, час), а затем построить график - программирование
Подтвердить что ты не робот

Разделить временные ряды данных на временные интервалы (скажем, час), а затем построить график

У меня есть файл данных с одним столбцом временных рядов:

'2012-02-01 17:42:44'
'2012-02-01 17:42:44'
'2012-02-01 17:42:44'

... Я хочу разбить данные так, чтобы у меня был счет в верхней части часа. Скажи:

'2012-02-01 17:00:00'  20   
'2012-02-01 18:00:00'  30  

"20" и "30" представляют количество записей временных рядов за этот период. И я хочу, чтобы иметь возможность графически отображать время и счетчик. Как я могу сделать это с помощью R?

Вот мой график текущей строки.

library(ggplot2)

req <- read.table("times1.dat")
summary(req)

da <- req$V2
db <- req$V1

time <- as.POSIXct(db)

png('time_data_errs.png', width=800, height=600)
gg <- qplot(time, da) + geom_line()

print(gg)
dev.off()
4b9b3361

Ответ 1

Похоже, вы хотите использовать cut, чтобы выяснить, сколько значений происходит в течение часа.

В целом полезно, если вы можете предоставить некоторые примеры данных. Вот некоторые из них:

set.seed(1) # So you can get the same numbers as I do
MyDates <- ISOdatetime(2012, 1, 1, 0, 0, 0, tz = "GMT") + sample(1:27000, 500)
head(MyDates)
# [1] "2012-01-01 01:59:29 GMT" "2012-01-01 02:47:27 GMT" "2012-01-01 04:17:46 GMT"
# [4] "2012-01-01 06:48:39 GMT" "2012-01-01 01:30:45 GMT" "2012-01-01 06:44:13 GMT"

Вы можете использовать table и cut (с аргументом breaks="hour" (см. ?cut.Date для получения дополнительной информации)), чтобы найти частоты в час.

MyDatesTable <- table(cut(MyDates, breaks="hour"))
MyDatesTable
# 
# 2012-01-01 00:00:00 2012-01-01 01:00:00 2012-01-01 02:00:00 2012-01-01 03:00:00 
#                  59                  73                  74                  83 
# 2012-01-01 04:00:00 2012-01-01 05:00:00 2012-01-01 06:00:00 2012-01-01 07:00:00 
#                  52                  62                  64                  33 
# Or a data.frame if you prefer
data.frame(MyDatesTable)
#                  Var1 Freq
# 1 2012-01-01 00:00:00   59
# 2 2012-01-01 01:00:00   73
# 3 2012-01-01 02:00:00   74
# 4 2012-01-01 03:00:00   83
# 5 2012-01-01 04:00:00   52
# 6 2012-01-01 05:00:00   62
# 7 2012-01-01 06:00:00   64
# 8 2012-01-01 07:00:00   33

Наконец, здесь строковый график объекта MyDatesTable:

plot(MyDatesTable, type="l", xlab="Time", ylab="Freq")

enter image description here


cut может обрабатывать диапазон временных интервалов. Например, если вы хотите вводить таблицы каждые 30 минут, вы можете легко адаптировать аргумент breaks, чтобы обработать это:

data.frame(table(cut(MyDates, breaks = "30 mins")))
#                   Var1 Freq
# 1  2012-01-01 00:00:00   22
# 2  2012-01-01 00:30:00   37
# 3  2012-01-01 01:00:00   38
# 4  2012-01-01 01:30:00   35
# 5  2012-01-01 02:00:00   32
# 6  2012-01-01 02:30:00   42
# 7  2012-01-01 03:00:00   39
# 8  2012-01-01 03:30:00   44
# 9  2012-01-01 04:00:00   25
# 10 2012-01-01 04:30:00   27
# 11 2012-01-01 05:00:00   33
# 12 2012-01-01 05:30:00   29
# 13 2012-01-01 06:00:00   29
# 14 2012-01-01 06:30:00   35
# 15 2012-01-01 07:00:00   33

Update

Поскольку вы пытались построить с помощью ggplot2, здесь один подход (не уверен, что он лучший, поскольку я обычно использую базовую графику R, когда мне нужно).

Создайте data.frame таблицы (как показано выше) и добавьте фиктивную переменную "group" и запишите следующее:

MyDatesDF <- data.frame(MyDatesTable, grp = 1)
ggplot(MyDatesDF, aes(Var1, Freq)) + geom_line(aes(group = grp))

enter image description here