繁体   English   中英

R:有值的时间序列

[英]R: time series with value

我有一个带有日期和大小(文件数)的日志文件。 我想绘制每1分钟和每5分钟使用的带宽。 输入看起来像这样:

2014-08-08 06:37:34.610    639205638
2014-08-08 06:37:37.110    239205638
2014-08-08 06:38:58.810    635899318
2014-08-08 06:38:21.877   1420094614
2014-08-08 06:40:11.772    140034211

因此,我需要按日期将值归类为1分钟和5分钟的bin,对每个bin求和,然后根据最小数量对它们进行平均,然后根据时间绘制它们。

但是我觉得以前已经做过,可以使用通用绘图功能。

您可以使用xts轻松完成此操作。

# read in the data
x <- read.table(text="2014-08-08 06:37:34.610    639205638
2014-08-08 06:37:37.110    239205638
2014-08-08 06:38:58.810    635899318
2014-08-08 06:38:21.877   1420094614
2014-08-08 06:40:11.772    140034211", stringsAsFactors=FALSE)

# convert to xts
xx <- xts(x[, 3], as.POSIXct(paste(x[,1], x[, 2])))

# find the 1 minute and 5 minute endpoints
ep1 <- endpoints(xx, "minutes", 1)
ep5 <- endpoints(xx, "minutes", 5)

period.sum(xx, ep1) # 1 minute sums
period.sum(xx, ep5) # 5 minute sums

更一般(但较慢):

period.apply(xx, ep1, sum)

对于问题的最后一部分,请取这些结果的平均值

mean(period.sum(xx, ep1))
#[1] 1024813140

目前尚不清楚“按分钟数平均”的含义,但忽略了这一点,它按1分钟和5分钟对数据进行分箱并绘制了分箱。 请注意,我们已指定数据为"numeric"以避免整数溢出。 如果希望它们在单独的面板中显示,则忽略facet = NULL

library(zoo)
library(ggplot2)    
library(scales)

# read data from character variable Lines; Lines shown after graph
z <- read.zoo(text = Lines, index = 1:2, tz = "",
          colClasses = c(NA, NA, "numeric"))

ag1 <- aggregate(z, as.POSIXct(cut(time(z), "min")), sum)
ag5 <- aggregate(z, as.POSIXct(cut(time(z), "5 min")), sum)

autoplot(na.approx(cbind(ag1, ag5)), facet = NULL) + 
   scale_x_datetime(breaks = "1 min", labels = date_format("%H:%M"))

截图

Here is `Lines` :

Lines <- "2014-08-08 06:37:34.610    639205638
2014-08-08 06:37:37.110    239205638
2014-08-08 06:38:58.810    635899318
2014-08-08 06:38:21.877   1420094614
2014-08-08 06:45:11.772    140034211"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM