2012-10-31 9 views
20
data = c(1,2,3,4) 
names = c("foo", "bar", "baz", "yak") 
d = data.frame(data, row.names=names) 

यह रिटर्न:राउननाम खोए बिना, मैं केवल एक कॉलम के साथ डेटा.फ्रेम कैसे सॉर्ट कर सकता हूं?

data 
foo 1 
bar 2 
baz 3 
yak 4 

अब, मैं पंक्ति के नाम संलग्न खोने के बिना कॉलम के आधार पर इस dataframe सॉर्ट करने के लिए, चाहते हैं। तो, मेरे परिणाम होगा:

data 
yak 4 
baz 3 
bar 2 
foo 1 

मैं पहले से ही निम्नलिखित की कोशिश की है:

  • d[order(-d$data),] है, जो निश्चित रूप से केवल मुझे एक आयामी सूची देता है।

  • plyr पैकेज है, जो पंक्ति के नाम चला जाता है से arrange(d, desc(data))

  • बाहर, o = order(-d$data) साथ आदेश को ढूंढें, फिर

    data.frame(d[o,], row.names=rownames(d)[o]) 
    

    ... जो अभी भी मुझे गलत स्तंभ नाम के साथ छोड़ देता है साथ फ्रेम को फिर से संगठित।

क्या ऐसा करने के लिए कोई रास्ता है?

उत्तर

29

आप अपने पहले ही प्रयास के साथ करीब थे, बस drop = FALSE का उपयोग कर के बारे में भूल:

> d[order(-d$data), , drop = FALSE] 
    data 
yak 4 
baz 3 
bar 2 
foo 1 
+0

आह, दिलचस्प। मुझे किसी भी तरह से कीवर्ड "ड्रॉप" को पढ़ने के बाद ही इस बारे में पता नहीं चला, जो अब मुझे लगता है कि आर ड्रॉपिंग आयाम एक अच्छा विचार है या नहीं। मैं उस पर पढ़ूंगा। – slhck

+1

मुझे लगता है कि हर कोई पहले से ही इस सवाल से पूछ चुका है। आर देवताओं की सर्वसम्मति यह थी कि यह डिफ़ॉल्ट इतना अच्छा नहीं था, लेकिन यह मौजूदा कोड को कंसोल किए बिना बदला नहीं जा सकता है। क्यू –

+0

में ठीक किया जाएगा जब मैं इस समाधान का उपयोग करता हूं तो मैं अपनी सभी पंक्तियों को फ़िल्टर करता हूं लेकिन एक। ये कैसे हुआ? – Kory

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

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