2014-10-13 4 views
0

У меня есть файл журнала с датами и размерами (файлов). Я хотел бы построить полосу пропускания, используемую за 1 минуту и ​​за 5 минут. Input выглядит следующим образом:R: временные ряды со значением

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 минут бункеров, сумма каждого бин, усреднять их по количеству минут с, и построить их против времени.

Но у меня есть чувство, что это было сделано раньше, и что я могу использовать общую функцию построения графика.

ответ

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 
0

Его не ясно, что «в среднем их по количеству минут "означает, но игнорируя это, это заполняет данные на 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" 
Смежные вопросы