2010-11-03 20 views
5

मैं 900,000 पंक्तियों और आर में 11 कॉलम के साथ एक डेटा फ्रेम स्तंभ नाम और प्रकार इस प्रकार हैं :छंटाई डेटा

  1. तारीख
  2. mcode
  3. ycode
  4. yissue

स्तरों के आदेश यहाँ महत्वपूर्ण हैं, यानी वे पहली तारीख के अनुसार क्रमबद्ध किया जाना चाहिए, और अगर वहाँ समान दिनांकों हैं, वे है, तो और आगे mcode के अनुसार क्रमबद्ध किया जाना चाहिए। मैं आर में ऐसा कैसे कर सकता हूं?

+2

'मदद की पहले पैराग्राफ पढ़ना लेने के लिए (क्रमबद्ध) 'आपके प्रश्न का उत्तर दें। –

+1

नीचे दिए गए उत्तर प्राप्त करने के बाद, मुझे यकीन है कि मैंने सही काम किया है। मैं ♥ ढेर ओवरफ्लो। –

उत्तर

10

शायद ऐसा कुछ?

> df<- data.frame(a=rev(1:10), b=rep(c(2,1),5), c=rnorm(10)) 
> df 
    a b   c 
1 10 2 -0.85212079 
2 9 1 -0.46199463 
3 8 2 -1.52374565 
4 7 1 0.28904717 
5 6 2 -0.91609012 
6 5 1 1.60448783 
7 4 2 0.51249796 
8 3 1 -1.35119089 
9 2 2 -0.55497745 
10 1 1 -0.05723538 
> with(df, df[order(a, b, c), ]) 
    a b   c 
10 1 1 -0.05723538 
9 2 2 -0.55497745 
8 3 1 -1.35119089 
7 4 2 0.51249796 
6 5 1 1.60448783 
5 6 2 -0.91609012 
4 7 1 0.28904717 
3 8 2 -1.52374565 
2 9 1 -0.46199463 
1 10 2 -0.85212079 

"आदेश" समारोह तर्क के रूप में कई वैक्टर ले सकते हैं।

+5

आप ऑर्डर करने के लिए एक तर्क को उपसर्ग भी कर सकते हैं - उस मानदंड के लिए अवरोही के बजाय आरोही क्रमबद्ध करने के लिए, उदाहरण के लिए, ऑर्डर (डीएफ $ बी, -डीएफ $ ए, डीएफ $ सी)। – caracal

+0

अच्छा, महान परिशिष्ट – jbremnant

8

पहले के समाधान पर निर्माण, यहां दो अन्य दृष्टिकोण हैं। दूसरे दृष्टिकोण के लिए plyr की आवश्यकता है।

df.sorted = df[do.call(order, df[names(df)]),]; 
df.sorted = arrange(df, a, b, c) 
4

ऊपर जवाब में से कोई भी अपने आग प्रकाश यदि आप हमेशा डोबी पैकेज से orderBy() फ़ंक्शन का उपयोग कर सकते हैं:

require(doBy) 
sortedData <- orderBy(~date+mcode+ycode+yissue , data=unsortedData) 

आप सहज उम्मीद कर सकते हैं, आप के सामने एक नकारात्मक चिह्न रख सकते हैं किसी भी चर को अवरोही क्रमबद्ध करने के लिए।

ऑर्डर के बारे में जादुई कुछ भी नहीं है()। प्रलेखन के अनुसार, यह एक "ऑर्डर() फ़ंक्शन के लिए रैपर है - महत्वपूर्ण अंतर यह है कि ऑर्डर करने के लिए चर मॉडल मॉडल द्वारा दिए जा सकते हैं।"

मुझे वाक्यविन्यास को याद रखना आसान लगता है।

1

अतिरिक्त नोट्स:) का उपयोग -c (तरह कारक या चरित्र स्तंभों को उल्टा करने के

with(df, df[order(a, b, -c(myCharCol)), ]) 

इसके अलावा, आप एक वेक्टर जोड़ सकते हैं केवल कुछ स्तंभों

with(df, df[order(a, b, c), c('a','b','x','y')]) 
संबंधित मुद्दे