R:有价值的时间序列

时间:2014-10-13 13:05:16

标签: r plot

我有一个包含日期和大小(文件)的日志文件。我想绘制每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分钟的箱子,将每个箱子加起来,将它们按照minite的数量进行平均,然后根据时间绘制它们。

但我感觉之前已经完成了这项工作,我可以使用通用的绘图功能。

2 个答案:

答案 0 :(得分:1)

您可以使用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 :(得分:0)

不清楚是什么&#34;按分钟数平均值&#34;意味着但忽略了这一点,这将数据分为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"))

screenshot

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"