2014-09-04 13 views
5

अगर मैं यहाँ कुछ तुच्छ याद कर रहा हूँ मैं सोच रहा हूँ:रैंकिंग NAS समान रूप से [आर]

जब ऐसा युक्त NAS की तरह एक वेक्टर रैंकिंग, वहाँ कैसे NAS से निपटने के लिए के चार विकल्प हैं:

x<-c(5, NA, 3, NA, 6, 9, 10, NA, 5, 7, 12) 

rank(x, na.last=T) 
# [1] 2.5 9.0 1.0 10.0 4.0 6.0 7.0 11.0 2.5 5.0 8.0 

rank(x, na.last=F) 
# [1] 5.5 1.0 4.0 2.0 7.0 9.0 10.0 3.0 5.5 8.0 11.0 

rank(x, na.last=NA) 
# [1] 2.5 1.0 4.0 6.0 7.0 2.5 5.0 8.0 

rank(x, na.last="keep") 
# [1] 2.5 NA 1.0 NA 4.0 6.0 7.0 NA 2.5 5.0 8.0 

मैं एनएएस को रखने और रैंक करने के लिए देख रहा हूं। मेरे उद्देश्यों के लिए उन्हें समान रूप से और अंतिम स्थान दिया जाना चाहिए। इस स्थिति में ties.method का उपयोग करने के लिए डिफ़ॉल्ट "औसत" होना ठीक है। मैं इस परिणाम के लिए देख रहा हूँ:

# [1] 2.5 10.0 1.0 10.0 4.0 6.0 7.0 10.0 2.5 5.0 8.0 

रैंक मदद से: "एनए मान बराबर होना कभी नहीं माना जाता है: na.last के लिए = सही और na.last = FALSE वे में अलग वरीयता दी गयी होती क्रम में वे एक्स में होते हैं। "

तो, ऐसा लगता है कि मैं क्या चाहता हूं - यानी उन्हें समान रूप से इलाज करने के लिए और औसत रैंक के रूप में औसत रैंक rank का उपयोग करके संभव नहीं है। क्या यह सच है - क्या रैंक के माध्यम से ऐसा करने का कोई आसान तरीका नहीं है? क्या मुझे rank(x, na.last="keep") करने के बाद एनएएस के रैंक को दोबारा डालने के लिए कोड की दूसरी पंक्ति पर भरोसा करना है?

उत्तर

2

आप इसे दोनों आगे और पीछे की ओर रैंक सकता है और फिर मतलब लें:

(rank(x, na.last=T) + rev(rank(rev(x), na.last=T)))/2 
# [1] 2.5 10.0 1.0 10.0 4.0 6.0 7.0 10.0 2.5 5.0 8.0 
3

मुझे यकीन है कि अगर यह सबसे सुरुचिपूर्ण समाधान है नहीं कर रहा हूँ, लेकिन आप तो जैसे इतना है कि वे हमेशा से रहे हैं पिछले एनए मूल्यों की जगह सकता है,:

rank(replace(x, is.na(x), max(x,na.rm=TRUE) + 1)) 
#[1] 2.5 10.0 1.0 10.0 4.0 6.0 7.0 10.0 2.5 5.0 8.0 
संबंधित मुद्दे