2011-02-24 3 views
5

"x"일 동안 평균을 계산하는 방법을 찾는 데 문제가 있습니다. 이 CSV 파일을 1 년 넘게 플로팅하면 플롯 라인 (스크린 샷 첨부)에 올바르게 표시하기에는 너무 많은 데이터입니다. 나는 선 그래프가 읽기가 너무 어렵지 않기 때문에 며칠마다 (아마 2, 일주일 등) 데이터를 평균화하려고합니다. R과 함께이 문제를 어떻게 해결할 지에 대한 조언이 있습니까?R 각 <x> 일 동안의 평균값으로 스크립트를 사용합니다.

results.csv

POSTS,PROVIDER,TYPE,DATE 
29337,FTP,BLOG,2010-01-01 
26725,FTP,BLOG,2010-01-02 
27480,FTP,BLOG,2010-01-03 
31187,FTP,BLOG,2010-01-04 
31488,FTP,BLOG,2010-01-05 
32461,FTP,BLOG,2010-01-06 
33675,FTP,BLOG,2010-01-07 
38897,FTP,BLOG,2010-01-08 
37122,FTP,BLOG,2010-01-09 
41365,FTP,BLOG,2010-01-10 
51760,FTP,BLOG,2010-01-11 
50859,FTP,BLOG,2010-01-12 
53765,FTP,BLOG,2010-01-13 
56836,FTP,BLOG,2010-01-14 
59698,FTP,BLOG,2010-01-15 
52095,FTP,BLOG,2010-01-16 
57154,FTP,BLOG,2010-01-17 
80755,FTP,BLOG,2010-01-18 
227464,FTP,BLOG,2010-01-19 
394510,FTP,BLOG,2010-01-20 
371303,FTP,BLOG,2010-01-21 
370450,FTP,BLOG,2010-01-22 
268703,FTP,BLOG,2010-01-23 
267252,FTP,BLOG,2010-01-24 
375712,FTP,BLOG,2010-01-25 
381041,FTP,BLOG,2010-01-26 
380948,FTP,BLOG,2010-01-27 
373140,FTP,BLOG,2010-01-28 
361874,FTP,BLOG,2010-01-29 
265178,FTP,BLOG,2010-01-30 
269929,FTP,BLOG,2010-01-31 

R 스크립트

library(ggplot2); 
data <- read.csv("results.csv", header=T); 
dts <- as.POSIXct(data$DATE, format="%Y-%m-%d"); 
attach(data); 
a <- ggplot(dataframe, aes(dts,POSTS/1000, fill = TYPE)) + opts(title = "Report") + labs(x = NULL, y = "Posts (k)", fill = NULL); 
b <- a + geom_bar(stat = "identity", position = "stack"); 
plot_theme <- theme_update(axis.text.x = theme_text(angle=90, hjust=1), panel.grid.major = theme_line(colour = "grey90"), panel.grid.minor = theme_blank(), panel.background = theme_blank(), axis.ticks = theme_blank(), legend.position = "none"); 
c <- b + facet_grid(TYPE ~ ., scale = "free_y"); 
d <- c + scale_x_datetime(major = "1 months", format = "%Y %b"); 
ggsave(filename="/root/results.png",height=14,width=14,dpi=600); 

그래프 이미지

enter image description here

+0

'geom_bar' 대신'geom_smooth'를 사용해 보셨습니까? – hadley

답변

4

이 시도 :

Average <- function(Data,n){ 
    # Make an index to be used for aggregating 
    ID <- as.numeric(as.factor(Data$DATE))-1 
    ID <- ID %/% n 
    # aggregate over ID and TYPE for all numeric data. 
    out <- aggregate(Data[sapply(Data,is.numeric)], 
     by=list(ID,Data$TYPE), 
     FUN=mean) 
    # format output 
    names(out)[1:2] <-c("dts","TYPE") 
    # add the correct dates as the beginning of every period 
    out$dts <- as.POSIXct(Data$DATE[(out$dts*n)+1]) 
    out 
} 

dataframe <- Average(Data,3) 

작성한 플롯 스크립트와 함께 작동합니다.

일부 발언 :

  • 이제까지
  • attach()의 사용을 방지하는 기능 이름 뒤에 어떤 변수 (데이터, C, ...)를 호출하지 않습니다. 그렇다면 detach()을 나중에 추가하면 문제가 생길 수 있습니다. 더 나은이 기능을 사용하는 것입니다 with()within()
+0

dts 변수에 올바른 형식을 추가하도록 편집되었습니다. –

+0

빠른 응답을 보내 주셔서 감사합니다. 이것은 내가 필요한 것입니다. 나는 너의 충고에 유의할 것이다. –

+0

브라우저 설명을 제거 할 수 있습니다. – hadley

3

TTR 패키지도 가지고 하나의 문이 작업을 수행 할 것입니다 평균 기능 이동 여러 :

library(TTR) 
mavg.3day <- SMA(data$POSTS, n=3) # Simple moving average 

대체 'N'의 다른 값을위한 당신의 원하는 이동 평균 길이.

관련 문제