2012-08-29 20 views
8

मैं डेटा फ्रेम से शीर्ष 'एन' कंपनियां प्राप्त करने का प्रयास कर रहा हूं। यहां मेरा कोड है।घटते क्रम में डेटा फ्रेम से शीर्ष एन कंपनियों को कैसे प्राप्त करें

data("Forbes2000", package = "HSAUR") 
sort(Forbes2000$profits,decreasing=TRUE) 

अब मैं इस क्रमबद्ध वेक्टर से शीर्ष 50 अवलोकन प्राप्त करना चाहता हूं।

उत्तर

19

head और tail वास्तव में उपयोगी कार्य हैं!

head(sort(Forbes2000$profits,decreasing=TRUE), n = 50) 

आप data.frame के पहले 50 पंक्तियों चाहते हैं, तो आप arrange समारोह plyr से data.frame सॉर्ट करने के लिए उपयोग कर सकते हैं और उसके बाद का उपयोग head

library(plyr) 

head(arrange(Forbes2000,desc(profits)), n = 50) 

सूचना है कि मैं में profits लिपटे desc पर कॉल करें जिसका अर्थ है कि यह घटते क्रम में क्रमबद्ध होगा।

data.frame सॉर्ट करने के लिए plyr

बिना
head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50) 
+0

ईश्वर मुझे प्लीयर पसंद है। – bstockton

7

उपयोग order काम करते हैं, तो head का उपयोग केवल पहले 50 पंक्तियां प्राप्त करने के लिए।

data("Forbes2000", package = "HSAUR") 
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50) 
2

आप dplyr से rank उपयोग कर सकते हैं।

library(dplyr) 
    top_fifty <- Forbes2000 %>% 
     filter(rank(desc(profits))<=50) 

यह अवरोही क्रम में अपने डेटा को सॉर्ट करता है और केवल मूल्यों जहां रैंक से 50 से कम या बराबर है (यानी शीर्ष 50) रहता है।
Dplyr बहुत उपयोगी है। कमांड और चेनिंग सिंटैक्स को समझना बहुत आसान है। 10/10 की सिफारिश करेंगे।

+0

कोई भी 'फ़िल्टर (...)' के बजाय 'top_n (n = 50, wt = profits)' का उपयोग कर सकता है – andrasz

0

मैनेल सही है कि सामान्य रूप से, आप एक सॉर्टिंग फ़ंक्शन के साथ सिर() और पूंछ() फ़ंक्शंस का उपयोग करना चाहते हैं। मुझे उल्लेख करना चाहिए कि मध्यम डेटा सेट के लिए विन्स की विधि तेजी से काम करती है। आप सिर() या पूंछ() का उपयोग नहीं किया है, तो आप बुनियादी उपधारा कॉल ऑपरेटर [] ....

library(plyr) 
x = arrange(Forbes2000,desc(profits)) 
x = x[1:50,] 
#Or using Order 
x = Forbes2000[order(Forbes2000$profits, decreasing= T),] 
x = x[1:50,] 

हालांकि इस्तेमाल किया जा सकता था, मैं वास्तव में कर सिर) की सलाह देते हैं (, पूंछ() , या फ़िल्टर() फ़ंक्शंस क्योंकि नियमित [] ऑपरेटर मानता है कि आपका डेटा आसानी से खींचे गए सरणी या मैट्रिक्स प्रारूप में संरचित है। (उम्मीद है कि यह तेजा प्रश्न का उत्तर देता है)

अब आप जो पॅककेज चुनते हैं वह काफी हद तक व्यक्तिपरक है। हालांकि लोगों की टिप्पणियों को पढ़ते हुए, मैं कहूंगा कि {utils} head() और पूंछ, या प्लीर() के साथ प्लीयर की व्यवस्था(), {bases} के ऑर्डर() का उपयोग करने का विकल्प काफी हद तक स्मृति आकार और पंक्ति आकार पर निर्भर करता है आपका डेटासेट मैं इस बारे में अधिक जानकारी दे सकता हूं कि कैसे प्लीयर और कभी-कभी डेलर को बड़े जटिल डेटासेट के साथ समस्याएं होती हैं, लेकिन मैं विषय से बाहर निकलना नहीं चाहता हूं।

पीएस यह मेरी पहली बार जवाब देने में से एक है इसलिए प्रतिक्रिया की सराहना की जाती है।