2013-07-19 8 views
8

मैं पूर्णांकों का एक वेक्टर है की 1 से 3 मान लीजिए (अधिक हो सकता है):क्रमबद्ध वेक्टर

x <- sample(1:3, 10, replace=T) 

[1] 1 3 1 2 2 1 3 2 3 2 

अगर मैं प्रकार x मैं

sort(x) 
[1] 1 1 1 2 2 2 2 3 3 3 
मिलेगा

लेकिन मुझे पहले जाने के लिए 2s की आवश्यकता है, फिर 1 एस, फिर 3 एस।

[1] 2 2 2 2 1 1 1 3 3 3 

तो, अगर मैं एक वेक्टर y = c(2, 1, 3) है, मैं इसे कैसे आदेश छँटाई के लिए उपयोग कर सकते हैं?

और वास्तव में मुझे मूल्यों की आवश्यकता नहीं है, लेकिन मूल वेक्टर में क्रमबद्ध मानों की अनुक्रमणिका, जैसा कि मुझे order फ़ंक्शन से मिलता है।

+0

एन 1 से हमेशा संख्या हैं? – Arun

+0

मेरे मामले में, हाँ। – yuk

उत्तर

7

मूल्यों का एक सरल remapping काम करता है:

x <- sample(1:3, 10, replace=T) 
x 
[1] 2 3 1 1 3 2 2 3 3 2 
order(c(2,1,3)[x]) 
[1] 1 6 7 10 3 4 2 5 8 9 
+0

शानदार! धन्यवाद! – yuk

8

एक कुछ हद तक जटिल विकल्प:

x[order(factor(x,levels = c(2,1,3)))] 

या स्पष्ट रूप से, बस order सिर्फ सूचकांक के लिए कॉल।

+0

धन्यवाद! बहुत अच्छा काम करता है। मुझे लगता है कि 'as.integer' कॉल जरूरी नहीं है। सही? – yuk

+0

@yuk हाँ, मुझे विश्वास है कि आप सही हैं। – joran