2011-02-24 13 views
5

Ortalama "x" günlerinin nasıl hesaplanacağını öğrenmekle ilgili bir sorun yaşıyorum. Bu csv dosyasını 1 yıl boyunca çizmeye çalışırsam, bir arsa çizgisinde (ekran görüntüsü ekli) doğru şekilde görüntülenecek kadar fazla veri var. Verileri her birkaç günde bir ortalamaya göre değerlendirmek istiyorum (belki 2, bir hafta, vb ..) bu yüzden çizgi grafiğinin okunması çok zor değil. Bu sorunu R ile nasıl çözeceğime dair herhangi bir tavsiye var mı?R Her <x> günde ortalama değere komut dosyası

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 Senaryo

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); 

Grafik Görüntü

enter image description here

+0

"geom_bar" yerine "geom_smooth" kullanmayı denediniz mi? – hadley

cevap

4

bu deneyin:

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) 

Bu, verdiğiniz çizim betiği ile çalışır.

Bazı açıklamalar:

  • hiç
  • attach() kullanımını önlemek bir fonksiyon adından sonra bazı değişken (veri, c, ...) hiç aramıyorsun. Bunu yaparsanız, daha sonra detach() ekleyin veya bir noktada sorun yaşayacaksınız. Daha iyi işlevlerini kullanmaktır with() ve within()
+0

Dts değişkenine doğru biçimi eklemek için düzenlenmiştir. –

+0

Hızlı yanıt için teşekkürler. Bu tam ihtiyacım olan şey. Tavsiyene kulak vereceğim. –

+0

Tarayıcı ifadesini kaldırmak isteyebilirsiniz. – hadley

3

TTR paketi de olan tek bir deyimi ile yapacak ortalama fonksiyonları hareketli birkaç:

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

Yedek 'n' farklı bir değer için senin istenen hareketli ortalama uzunluk.