2014-10-06 17 views
5

में फैलता है (मैं अपने डेटा में हेरफेर कर रहा था और पाया कि मैंने प्रक्रिया में किसी बिंदु पर कुछ गलत किया है। जब मैंने इस मुद्दे की खोज की, तो tidyr पैकेज में समस्या spread() के निम्न व्यवहार पर आ गई।tidyr हैंडल कारक स्तर

यहां एक प्रदर्शनकारी उदाहरण है। आइए हम कहें कि हमारे पास निम्न जैसे डेटा फ्रेम हैं।

> d <- data.frame(factor1 = rep(LETTERS[1:3], each = 3), 
+ factor2 = rep(paste0("level", c(1, 2, 10)), 3), 
+ num = 1:9 
+) 
> d 
    factor1 factor2 num 
1  A level1 1 
2  A level2 2 
3  A level10 3 
4  B level1 4 
5  B level2 5 
6  B level10 6 
7  C level1 7 
8  C level2 8 
9  C level10 9 

मैं इस लंबे प्रारूपित डेटा फ्रेम को विस्तृत प्रारूप में परिवर्तित करना चाहता था। और मैंने सोचा कि spread() जाने का एक तरीका है। परिणाम, हालांकि, मुझे उम्मीद नहीं थी।

> spread(d, factor2, num) 
    factor1 level1 level2 level10 
1  A  1  3  2 
2  B  4  6  5 
3  C  7  9  8 

तो factor1 'ए' और factor2 "level2" है तो मान 2 होना चाहिए, लेकिन जिसके परिणामस्वरूप विस्तृत प्रारूप 3. कहते हैं जाहिर है, संख्या factor2 की वर्णमाला के क्रम द्वारा आदेश दिया गया है (level1> level10 > स्तर 2) और व्यापक प्रारूप में रखा गया है। लेकिन जब ऐसा होता है, तो कारक 2 लेबल उसी डेटा को बनाए रखता है जैसा कि वे मूल डेटा फ्रेम (स्तर 1> स्तर 2> स्तर 10) में दिखाई देते हैं।

क्या कोई यह समझा सकता है कि ऐसा क्यों होता है (और/या जहां मुझे प्रासंगिक जानकारी मिल सकती है)?

+0

'tidyr' की devel संस्करण का उपयोग करना, colnames नंबर मेल, लेकिन कॉलम के क्रम' level1, level10, level2' है। यह भी 'डी $ कारक 2 <- कारक (डी $ कारक 2, स्तर = सी ('स्तर 1', 'स्तर 2', 'स्तर 10') द्वारा हल किया गया प्रतीत होता है; फैलाना (डी, कारक 2, संख्या) ' – akrun

+0

मेरे पास 'tidyr' संस्करण 0.1 है और मुझे आपके कोड का उपयोग करके सही परिणाम मिला है। शायद आपको आर को पुनरारंभ करना चाहिए और देखें कि क्या चीजें बदलती हैं? –

+0

ऐसा लगता है कि मैं विकास संस्करण का उपयोग कर रहा था। जब मैंने सीआरएएन से चालू एक स्थापित किया, तो यह ठीक काम किया। इसे इंगित करने के लिए @akrun धन्यवाद। –

उत्तर

8

उपलब्ध कराए गए आंकड़ों का उपयोग करना, मैं अलग परिणाम मिला:

> packageVersion("tidyr") 
[1] ‘0.1’ 
spread(d, factor2, num) 
    factor1 level1 level10 level2 
1  A  1  3  2 
2  B  4  6  5 
3  C  7  9  8 
+0

मैंने पोस्ट करने से पहले पैकेज के संस्करण की जांच की, और चूंकि यह कहा 0.1 मैंने सोचा कि यह नवीनतम संस्करण है। लेकिन जैसा कि @क्रुन ने उल्लेख किया है, मैं विकासशील संस्करण का उपयोग कर रहा था जिसे मैंने जिथब से डाउनलोड किया था। जब मैंने सीआरएएन से पैकेज स्थापित किया, तो यह सही ढंग से काम करता था। धन्यवाद! –

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