我有一个包含日期和大小(文件)的日志文件。我想绘制每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的数量进行平均,然后根据时间绘制它们。
但我感觉之前已经完成了这项工作,我可以使用通用的绘图功能。
答案 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"))
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"