आर

2011-07-20 11 views
14

में दो कॉलम द्वारा डेटा फ्रेम ऑर्डर करें मैं डेटा कारकों की पंक्तियों को दो कारकों से पुन: व्यवस्थित करने का प्रयास कर रहा हूं। पहले कारक के लिए मैं डिफ़ॉल्ट ऑर्डरिंग से खुश हूं। दूसरे कारक के लिए मैं पंक्तियों में अपना खुद का कस्टम ऑर्डर देना चाहता हूं।आर

appleOrdered <- c("E", "D", "J", "A", "F", "G", "I", "B", "H", "C") 

मैं इस की कोशिश की है:

dat <- data.frame(apple=rep(LETTERS[1:10], 3), 
        orange=c(rep("agg", 10), rep("org", 10), rep("fut", 10)), 
        pear=rnorm(30, 10), 
        grape=rnorm(30, 10)) 

मैं "सेब" ऑर्डर करने के लिए एक विशिष्ट तरीके से करना चाहते हैं: यहाँ कुछ डमी डेटा है

dat <- dat[with(dat, order(orange, rep(appleOrdered, 3))), ] 

लेकिन यह लगता है एक यादृच्छिक क्रम में "सेब" डाल दिया। कोई सुझाव? धन्यवाद। कारक स्तरों पुन: क्रम

dat$apple <- factor(dat$apple,levels=appleOrdered) 
arrange(dat,orange,apple) 
+0

करने के लिए संबंधित [कैसे मैं इन सबसे एक वेक्टर आधारित है किसी अन्य के मूल्यों पर] (http://stackoverflow.com/questions/1568511/how-do-i-sort-one-vector-based-on-values-of-another) –

उत्तर

10

:

+1

यह बहुत अच्छा काम करता है, धन्यवाद। As.integer() में कारक कॉल को लपेटने का कोई कारण है? ऐसा लगता है कि यह वास्तव में एक ही परिणाम देने लगता है। – Steve

+0

लगता है - मैं सकारात्मक नहीं था अगर कारक सॉर्ट ऑर्डर को स्तर या as.character() द्वारा परिभाषित किया गया था। – Charles

11

plyr से वांछित क्रम में स्तर और arrange समारोह के साथ एक कारक उपयोग करने का प्रयास

dat[with(dat, order(orange, as.integer(factor(apple, appleOrdered)))), ] 
+0

यह बहुत अच्छा काम करता है, धन्यवाद। – Steve

+0

आपको 'आदेश = TRUE' की आवश्यकता नहीं है। –