2012-01-06 14 views
5

में एक चरित्र वेक्टर को शामिल करने के लिए क्षमा करें, क्रिप्टिक शीर्षक के लिए मुझे अपनी समस्या के लिए कोई बेहतर सारांश नहीं मिला। तो यहाँ मेरी समस्या है: मैं एक dataframe है और समूहों जो ठीक काम करता है से अधिक diff() बनाना चाहते:, मैं अपने परिणाम में index शामिल करना चाहते हैं जोddply: परिणाम

df <- data.frame (name = rep(c("a", "b", "c"), 4), 
       index = rep(c("c1", "c2"), each=6), 
       year = rep(c(2008:2010),4), 
       value = rep(1:3, each=4)) 

head(df) 

    name index year value 

1 a c1 2008  1 
2 b c1 2009  1 
3 c c1 2010  1 

ddply(df, .(name, year), summarize, value=diff(value)) 

हालांकि मैं के साथ करने की कोशिश की:

ddply(df, .(name, year), summarize, value=diff(value), index=index) 

length(rows) == 1 is not TRUE 

है कौन सा क्योंकि सूचकांक अधिक पंक्तियां हैं मुझे लगता है कि क्योंकि यहद्वारा संसाधित नहीं है:

फिर भी यह त्रुटि संदेश पैदावार। क्या मेरी समस्या का कोई त्वरित समाधान है?

बहुत बहुत धन्यवाद!

संपादित

मैं मेरे सवाल का मैं क्या परिणाम में जोड़ना चाहते हैं स्पष्ट करने के लिए प्रयास करें:

ऊपर मान लीजिए चर index। यह एक कारक है जिसे कुछ समझाना चाहिए। फिर भी, मैं diff() नहीं ले सकता जो समझ में नहीं आता है इसलिए मैं इसे किसी भी चीज़ को बदले बिना पास करना चाहता हूं। मैंने drop==FALSE की कोशिश की जो एक ही त्रुटि मैसेज उत्पन्न करता था।

इस भ्रम के लिए सोरर!

name year index d.value 
a 2009 c2  +20 #c2 stayed the same just the first row got intentionally dropped. 
a 2010 c1  +10 

एक विशेषता की तरह कुछ के रूप में दुर्भाग्यपूर्ण नाम index पर विचार करें::

name year index value 
a 2008 c1 10 
a 2009 c2 30 
a 2010 c1 40 

diff के ले जा रहा समूह acroos के बाद 'एक' इस तरह दिखता है: यहाँ एक बहुत ही सरल उदाहरण है यह वर्षों के दौरान बदल सकते हैं लेकिन diff()

मुझे वास्तव में उम्मीद है कि यह आपको एक सुराग देता है जो मैं चाहता हूं - यदि नहीं, तो मैं सवाल हटा दूंगा क्योंकि मुझे एक असाधारण कामकाज मिला है;) और सभी असुविधा के लिए खेद है!

+0

आप उन्हें कैसे लाइन करना चाहते हैं? हेड डिफ़ॉल्ट रूप से पहले छह तत्व लौटाता है। – hadley

+0

अनुमान है कि मुझे 'हेड()' भाग का अर्थ नहीं मिला जिसे मैंने किसी अन्य उत्तर से कॉपी किया था। मैं मूल रूप से एक ऐसे इंडेक्स को पास करना चाहता हूं जो कड़ाई से नाम और वर्ष से जुड़ा हुआ है लेकिन उच्च आवृत्ति के साथ। मैं अपने प्रश्न को स्पष्ट कर दूंगा! – Seb

+0

और आप इंडेक्स को कैसा दिखाना चाहते हैं। डीडीप्ली में एक सबसेट में 4 पंक्तियां हैं, diff में तीन मान हैं और पहले दो में इंडेक्स सी 1 है और दूसरे दो में इंडेक्स सी 2 है। उस सूचकांक मूल्य का क्या होगा? "C1-C2"? –

उत्तर

2

मुझे पूरी तरह से यकीन नहीं है कि आप क्या चाहते हैं, ऐसा लगता है कि आप अलग-अलग होना चाहते हैं, इंडेक्स वैरिएबल को रखते हुए और प्रत्येक समूह की पहली पंक्ति को छोड़ना चाहते हैं। क्या यह आपको प्राप्त करता है जो आप चाहते हैं?

doSummary = function(df) { 
    values = diff(df$value) 
    indexes = df$index[2:length(df)] 
    data.frame(d.value=values, index=indexes) 
} 
ddply(df, .(name, year), doSummary) 
+0

इसमें कुछ समय लगा जब तक कि कोई मेरी गुप्त व्याख्या को समझने में सक्षम नहीं था, लेकिन ऐसा लगता है कि यह परिणाम था जिसे मैं प्राप्त करने की कोशिश कर रहा था! आपका बहुत बहुत धन्यवाद! – Seb

संबंधित मुद्दे