2013-04-02 32 views
6

Mam zestaw znaczników czasu UNIX i identyfikatorów URI i próbuję wykreślić łączną liczbę żądań dla każdego identyfikatora URI. Udało mi się to zrobić za jednym URI w czasie, stosując kolumnę atrapę:ggplot2 i cumsum()

x.df$count <- apply(x.df,1,function(row) 1) # Create a dummy column for cumsum 
x.df <- x.df[order(x.df$time, decreasing=FALSE),] # Sort 
ggplot(x.df, aes(x=time, y=cumsum(count))) + geom_line() 

jednak, że byłoby zrobić około 30 działek w moim przypadku.

ggplot2 nie pozwala wykreślić wiele linii w jednej działce (skopiowałem ten kawałek kodu z here):

ggplot(data=test_data_long, aes(x=date, y=value, colour=variable)) + 
    geom_line() 

Problemem jest to, że w ten sposób, cumsum() liczyłbym dalej.

Czy ktoś ma pomysł?

+2

można podać mały przykład zbiór danych, który ilustruje to, co opisujesz? – joran

+0

to brzmi jak zadanie dla 'plyr' lub' data.table'. Podziel dane przez URI, a następnie na 'cumsum' na każdym kawałku. 'data.table (x); x [, list (count = .I), by = URI] 'Lub coś w tym stylu ... – Justin

Odpowiedz

8

Oto dane test, który wykorzystuje plyr „s transform obliczyć skumulowaną sumę, a następnie zastosować te dane wykreślić używając ggplot2:

set.seed(45) 
DF <- data.frame(grp = factor(rep(1:5, each=10)), x=rep(1:10, 5)) 
DF <- transform(DF, y=runif(nrow(DF))) 

# use plyr to calculate cumsum per group of x 
require(plyr) 
DF.t <- ddply(DF, .(grp), transform, cy = cumsum(y)) 

# plot 
require(ggplot2) 
ggplot(DF.t, aes(x=x, y=cy, colour=grp, group=grp)) + geom_line() 

enter image description here

+0

Niestety, nie rozumiem, co masz na myśli przez przykładowe dane, wciąż jestem całkiem nowy z R. Twoja fabuła nie faktycznie pokazują sumy skumulowane. Linie musiałyby być monotoniczne. (BTW: Nie będziesz potrzebował cumsuma do tworzenia tego rodzaju linii, ECDF wykona to zadanie.) – Bob

+1

Wygenerowałem kilka przykładowych danych, ponieważ nie możesz tego zrobić (patrz komentarz @ jorana). Chyba wciąż patrzysz na stary spisek? To * jest * monotoniczne i jest sumą skumulowaną. jeśli chcesz zobaczyć dodane punkty, '+ geom_point()'. – Arun

+0

Witaj Arun, dziękuję za pomoc. Przykład zadziałał, ale po prostu nie dostałem monotonnego wykresu dla rzeczywistych danych. Zacząłem więc bawić się liczbami w przykładzie i myślę, że jest problem z dużymi liczbami. Czy możesz to odtworzyć? – Bob