2013-04-02 5 views
6

मेरे पास यूनिक्स टाइमस्टैम्प और यूआरआई का एक सेट है और मैं प्रत्येक यूआरआई के अनुरोधों की संचयी गणना को साजिश करने की कोशिश कर रहा हूं। मैं एक समय में एक यूआरआई के लिए एक डमी स्तंभ का उपयोग ऐसा करने में कामयाब रहे:ggplot2 और 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() 

हालांकि, कि मेरे मामले में लगभग 30 भूखंडों होगा।

ggplot2 आप एक भूखंड में कई पंक्तियों साजिश लिए समर्थ बनाता है (मैं here से कोड के इस टुकड़े की नकल की):

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

समस्या यह है कि, इस तरह से, cumsum() पर और पर भरोसा होता है।

क्या किसी के पास कोई विचार है?

+2

आप एक छोटा सा उदाहरण डेटा सेट प्रदान कर सकते हैं कि बताता है कि आप क्या वर्णन कर रहे हैं? – joran

+0

यह 'plyr' या' data.table' के लिए नौकरी की तरह लगता है। यूआरआई द्वारा डेटा को प्रत्येक टुकड़े पर अपने 'cumsum' पर विभाजित करें। 'Data.table (x); एक्स [, सूची (गिनती = आई), = द्वारा = यूआरआई] 'या ऐसा कुछ ... – Justin

उत्तर

8

यहाँ एक परीक्षण डाटा जो पहले संचयी योग की गणना करने के लिए और उसके बाद लागू डेटा ggplot2 का उपयोग कर साजिश कि plyr के transform का उपयोग करता है:

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

क्षमा करें, मुझे समझ में नहीं आया कि नमूना डेटा से आपका क्या मतलब है, मैं अभी भी आर के साथ नया हूं। आपकी साजिश नहीं वास्तव में संचयी रकम नहीं दिखाते हैं, हालांकि। लाइनों को monotonic होना होगा। (बीटीडब्ल्यू: आपको उस तरह की लाइनें बनाने के लिए cumsum की आवश्यकता नहीं होगी, ईसीडीएफ नौकरी करेगा।) – Bob

+1

मैंने कुछ नमूना डेटा जेनरेट किया है, क्योंकि आप एक प्रदान करते हैं (देखें @ जोरेन की टिप्पणी)। मुझे लगता है कि आप अभी भी पुरानी साजिश देख रहे हैं? यह * monotonic है और संचयी योग है। यदि आप अंक देखना चाहते हैं तो बस, 'geom_point() 'जोड़ें। – Arun

+0

हाय अरुण, आपकी मदद के लिए धन्यवाद। उदाहरण काम किया, लेकिन मुझे बस वास्तविक डेटा के लिए एक monotonic साजिश नहीं मिला। तो मैंने उदाहरण में संख्याओं के साथ खेलना शुरू कर दिया और मुझे लगता है कि बड़ी संख्या में कोई समस्या है। क्या आप इसे पुन: पेश कर सकते हैं? – Bob