2010-09-11 11 views
20

मेरे पास एक वेक्टर है और मैं उच्चतम और निम्नतम मूल्य वापस करने में सक्षम हूं, लेकिन 5 शीर्ष मूल्यों को कैसे वापस कर सकता हूं? क्या इसके लिए एक आसान एक-लाइन समाधान है?आर में वेक्टर से 5 शीर्ष मूल्य कैसे वापस करें?

उत्तर

32
> a <- c(1:100) 
> tail(sort(a),5) 
[1] 96 97 98 99 100 
+6

या 'सिर (तरह (एक, घटते = TRUE), 5)' – Marek

+0

पूंछ थोड़ा तेजी से सिर और घटते से है = सही > x <- rnorm (50000000) > system.time (पूंछ (प्रकार (x), 5)) उपयोगकर्ता प्रणाली बीत 22.64 0.25 22.95 > system.time (सिर (प्रकार (एक्स, घटते = TRUE), 5)) उपयोगकर्ता प्रणाली बीत 23.26 0.20 23.51 – Thierry

+0

@Thierry आप चाहिए एक बार फिर इसे चलाएं और औसत समय लें। क्योंकि मुझे लगता है कि मेरे सिमुलेशन के आधार पर कोई अंतर नहीं है (सांख्यिकीय रूप से बोल रहा है)। – Marek

2

हां, head(X, 5) जहां X आपके सॉर्ट किए गए वेक्टर हैं।

3
tail(sort.int(x, partial=length(x) - 4), 5) 

आंशिक साथ उपयोग करना sort.int (संभावित) तेजी से (संभावित) एक पूर्ण तरह से नहीं कर होने का लाभ है। लेकिन हकीकत में, मेरा कार्यान्वयन थोड़ा धीमा दिखाई देता है। शायद ऐसा इसलिए है क्योंकि पैरामीटर आंशिक के साथ! = नल, शेल सॉर्ट का उपयोग त्वरित क्रम के बजाय किया जाता है?

> x <- 1:1e6 
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5))) 
    user system elapsed 
    4.782 0.846 5.668 
> system.time(replicate(100, tail(sort(x), 5))) 
    user system elapsed 
    3.643 0.879 4.854 
+0

यदि आप इसके बजाय x <-runif (1e6) का उपयोग करते हैं तो आपको लाभ दिखाई देगा। ध्यान दें कि आपके द्वारा वापस आने वाले 5 मान वास्तव में उच्चतम 5 होंगे, लेकिन एक क्रमबद्ध क्रम में जरूरी नहीं है। – Tommy

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