आर

2013-05-24 24 views
7

में सशर्त संचयी योग मेरे पास समय श्रृंखला डेटा फ्रेम है और तारीखों की एक श्रृंखला के लिए स्टॉक प्रतीकों के लिए संचयी रिटर्न की गणना करना चाहता हूं। जब प्रतीक और/या तारीख संचयी वापसी को बदलना चाहिए। किसी भी सहायता की सराहना की जाएगी। मेरे डेटा फ्रेम का एक छोटा सा नमूना नीचे है जिसमें संचयी योग कॉलम वापस आना चाहिए। धन्यवाद।आर

 Date Symbol Time Last Return Cumulative.Sum 
1 1/2/2013  AA 9:30 42.00 n/a   n/a 
2 1/2/2013  AA 12:00 42.50 1.19%   1.19% 
3 1/2/2013  AA 16:00 42.88 0.89%   2.08% 
4 1/2/2013 AAPL 9:30 387.00 n/a   n/a 
5 1/2/2013 AAPL 12:00 387.87 0.22%   0.22% 
6 1/2/2013 AAPL 16:00 388.69 0.21%   0.44% 
7 1/3/2013  AA 9:30 42.88 n/a   n/a 
8 1/3/2013  AA 12:00 42.11 -1.80%   -1.80% 
9 1/3/2013  AA 16:00 41.89 -0.52%   -2.32% 
+0

मुझे आशा है कि इन लॉग रिटर्न ... – flodel

+1

नमूना डेटा मैं पोस्ट, नहीं में कर रहे हैं। मेरे वास्तविक डेटा फ्रेम में, हाँ लॉग – David

उत्तर

11

data.table पैकेज का उपयोग करके यह मामूली है। अपने डेटा को एक data.framedat कहा जाता है में है:

library(data.table) 
DT <- data.table(dat) 

DT[, your_cumsum_function(.SD), by=c('Date', 'Symbol')] 

कहाँ .SDby समूहों द्वारा निर्धारित data.table का उपसमुच्चय होती है। अधिक जानकारी के लिए ?data.table देखें। अपने विशिष्ट उदाहरण में

DT[, your_cumsum_function(Last), by=c('Date', 'Symbol')] 

, कार्य करें::

तुम भी सीधे स्तंभ नाम पारित कर सकते हैं

DT[, Return := as.numeric(sub('%$', '', Return))] 
DT[!is.na(Return), Cumulative.Sum := cumsum(Return), by = c('Date', 'Symbol')] 
+0

प्रतिक्रिया – David

9

यह split-apply-combine रणनीति के लिए आम मामला है: आप अद्वितीय संयोजन के द्वारा अपने data.frame विभाजित कुछ कॉलम (दिनांक और प्रतीक) के, सबसेट पर एक प्रक्रिया लागू करें (cumsum रिटर्न पर) और सबसेट को बड़े data.frame पर गठबंधन करें। यह plyr पैकेज से ddply के साथ आसानी से प्राप्त किया जा सकता:

mdf$Return <- as.numeric(sub("(\\d+\\.\\d+)\\%", "\\1", mdf$Return)) 
mdf$Return[ is.na(mdf$Return) ] <- 0 

library(plyr) 
ddply(mdf, .(Date,Symbol), transform, Cumulative.Sum = cumsum(Return)) 

     Date Symbol Time Last Return Cumulative.Sum 
1 1/2/2013  AA 9:30 42.00 0.00   0.00 
2 1/2/2013  AA 12:00 42.50 1.19   1.19 
3 1/2/2013  AA 16:00 42.88 0.89   2.08 
4 1/2/2013 AAPL 9:30 387.00 0.00   0.00 
5 1/2/2013 AAPL 12:00 387.87 0.22   0.22 
6 1/2/2013 AAPL 16:00 388.69 0.21   0.43 
7 1/3/2013  AA 9:30 42.88 0.00   0.00 
8 1/3/2013  AA 12:00 42.11 -1.80   -1.80 
9 1/3/2013  AA 16:00 41.89 -0.52   -2.32 
+0

सहायता के लिए धन्यवाद मदद के लिए धन्यवाद! – David