temporales - Divida los datos de las series de tiempo en intervalos de tiempo(digamos una hora) y luego trace la cuenta
series de tiempo diarias en r (1)
Parece que desea utilizar el cut
para averiguar cuántos valores ocurren dentro de una hora.
En general, es útil si puede proporcionar algunos datos de muestra. Aquí hay algunos:
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"
Puede usar la table
y cut
(con el argumento breaks="hour"
(vea ?cut.Date
para obtener más información)) para encontrar las frecuencias por hora.
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
Finalmente, aquí hay una gráfica de MyDatesTable
objeto MyDatesTable
:
plot(MyDatesTable, type="l", xlab="Time", ylab="Freq")
cut
puede manejar un rango de intervalos de tiempo. Por ejemplo, si desea tabular cada 30 minutos, puede adaptar fácilmente el argumento de breaks
para manejar eso:
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
Actualizar
Ya que estabas tratando de trazar con ggplot2
, aquí hay un enfoque (no estoy seguro de que sea el mejor, ya que usualmente uso los gráficos de la base R cuando lo necesito).
Cree un data.frame
de data.frame
de la tabla (como se demostró anteriormente) y agregue una variable de "grupo" ficticia y data.frame
lo siguiente:
MyDatesDF <- data.frame(MyDatesTable, grp = 1)
ggplot(MyDatesDF, aes(Var1, Freq)) + geom_line(aes(group = grp))
Acabo de tener un archivo de datos con una columna de series de tiempo:
''2012-02-01 17:42:44''
''2012-02-01 17:42:44''
''2012-02-01 17:42:44''
... Quiero dividir los datos de modo que tenga un recuento en la parte superior de la hora. Decir:
''2012-02-01 17:00:00'' 20
''2012-02-01 18:00:00'' 30
El ''20'' y el ''30'' representan el número de entradas de series de tiempo para ese período. Y quiero poder graficar el tiempo frente a ese ''recuento''. ¿Cómo puedo hacer esto con R?
Aquí está mi gráfica de línea actual.
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()