2015-02-03 8 views
5

मैं प्रत्येक वर्ष बोस्टन मैराथन में पुरुषों और महिलाओं के लिए जीतने के समय की साजिश के लिए आर लाइब्रेरी के लिए नए डिग्राफ का उपयोग करने की कोशिश कर रहा हूं। मैं दूसरे से बार जीतने का एक डेटा फ्रेम मिल गया है, यहाँ यह के एक हिस्से को बताया गया है:आर के लिए xg समय श्रृंखला को प्लॉट करने के लिए केवल वर्ष के लिए डीग्राफ का उपयोग करें?

winners <- data.frame(year=1966:1971, mensec=c(8231, 8145, 8537, 8029, 7830, 8325), womensec=c(12100, 12437, 12600, 12166, 11107, 11310)) 

लेकिन मैं इस से एक XTS वस्तु बनाने के लिए कैसे पता नहीं है। अगर मैं यह dygraph में काम नहीं करेगा समय श्रृंखला cbind करने की कोशिश मैं एक अलग ग्राफ

men <- ts(winners$mensec, frequency = 1, start=winners$year[1]) 
dygraph(men) 
women <- ts(winners$womensec, frequency = 1, start=winners$year[1]) 
dygraph(women) 

में प्रत्येक स्तंभ से एक नियमित रूप से समय श्रृंखला और ग्राफ हर एक dygraph का उपयोग कर बना सकते हैं

both <- cbind(men, women) 
dygraph(both) 

त्रुटि संदेश XTS में

त्रुटि है (x.mat, order.by = order.by, आवृत्ति = आवृत्ति (एक्स), ...): लंबाई Nrow (एक्स) से मेल खाना चाहिए (order.by)

कोई भी सुझाव? धन्यवाद

उत्तर

7

यह as.xts.ts में एक बग जैसा दिखता है। यह इंडेक्स के लिए दिनांकों का अनुक्रम बनाने के लिए length(x) का उपयोग करता है, जो मैट्रिक्स के लिए तत्वों की संख्या देता है (पंक्तियों की संख्या नहीं)।

आप उन पर cbind कॉल करने से पहले अपने ts वस्तुओं पर as.xts का उपयोग करके इसे हल करने के कर सकते हैं।

both <- cbind(men=as.xts(men), women=as.xts(women)) 
+0

जानना अच्छा है। ऐसा मत सोचो कि मैंने कभी पहले इसका सामना किया है। – timelyportfolio

3

ऐसा लगता है कि यहोशू ने सवाल का जवाब दिया था। यहां थोड़ा अलग कोड और एक वर्ष एक्स-अक्ष फॉर्मेटर के साथ पूर्ण उत्तर दिया गया है।

library(xts) 
library(dygraphs) 

winners <- data.frame(
    year=1966:1971 
    , mensec=c(8231, 8145, 8537, 8029, 7830, 8325) 
    , womensec=c(12100, 12437, 12600, 12166, 11107, 11310) 
) 

winners_xts <- as.xts(
    winners[-1] 
    , order.by = as.Date(
    paste0(winners$year,"-01-01",format="%Y-01-01") 
) 
) 

dygraph(winners_xts) %>% 
    dyAxis( 
    name="x" 
    ,axisLabelFormatter = "function(d){ return d.getFullYear() }" 
) 

# using the original data here is a way to merge 
# merge will work just like cbind 
# but need to convert to xts first 
men <- ts(winners$mensec, frequency = 1, start=winners$year[1]) 
women <- ts(winners$womensec, frequency = 1, start=winners$year[1]) 
do.call(merge,Map(as.xts,list(men=men,women=women))) 
संबंधित मुद्दे