2014-10-13 4 views
0

날짜와 크기 (파일)가있는 로그 파일이 있습니다. 1 분 및 5 분마다 사용되는 대역폭을 계획하고 싶습니다. 입력은 다음과 같습니다 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"으로 지정되었습니다.

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" 
을 : 당신이 그 (것)들을 별도의 패널에 표시하려면 facet = NULL 생략