2014-09-29 12 views
21

मान लीजिए मैं निम्न डेटाdplyr के साथ एक रैंकिंग चर बनाएँ?

df = data.frame(name=c("A", "B", "C", "D"), score = c(10, 10, 9, 8)) 

मैं रैंकिंग के साथ एक नया स्तंभ जोड़ना चाहते हैं। यह मैं क्या कर रहा है:

df %>% mutate(ranking = rank(score, ties.method = 'first')) 
# name score ranking 
# 1 A 10  3 
# 2 B 10  4 
# 3 C  9  2 
# 4 D  8  1 

लेकिन, मेरा वांछित परिणाम है:

# name score ranking 
# 1 A 10  1 
# 2 B 10  1 
# 3 C  9  2 
# 4 D  8  3 

जाहिर rank क्या मैं मन में है नहीं करता है। मुझे किस काम का उपयोग करना चाहिए?

+5

आप 'df%>% उत्परिवर्तित (रैंक = dense_rank (-score))' उम्मीद कर रहे हैं? – A5C1D2H2I1M1N2O1R2T1

+0

हां! आपका बहुत बहुत धन्यवाद! :-) – Ignacio

उत्तर

36

ऐसा लगता है कि आप "dplyr" से dense_rank खोज रहे हैं - लेकिन rank से सामान्य रूप से एक रिवर्स ऑर्डर में लागू होता है। जब आप सभी चर (न सिर्फ एक) के लिए रैंक लागू करने की आवश्यकता

df %>% mutate(rank = dense_rank(desc(score))) 
# name score rank 
# 1 A 10 1 
# 2 B 10 1 
# 3 C  9 2 
# 4 D  8 3 
+2

प्रबल ''स्कोर' के बावजूद' desc (स्कोर) 'का उपयोग करना चाहते हैं। हैडली ने मुझे एक सीपीएल बार छोड़ दिया है। – hrbrmstr

+0

@hrbrmstr, हाँ - संपादित .... – A5C1D2H2I1M1N2O1R2T1

+0

क्या सी 3 की रैंकिंग और डी 4 के लिए रैंकिंग संभव है? – Ignacio

2

अन्य समाधान:

इस प्रयास करें।

df = data.frame(name=c("A","B","C","D"), score=c(10,10,9,8), score2=c(5,1,9,2))

select(df,-name) %>% mutate_all(funs(dense_rank(desc(.))))

+0

' dplyr' के पास 'desc()' का उपयोग करने के बजाय, आपको 'inv_d' की आवश्यकता नहीं है। (यह अच्छा है क्योंकि यह कई डेटा प्रकारों के लिए काम करता है, न केवल संख्यात्मक।) आपको इसे अलग-अलग चरणों में करने की भी आवश्यकता नहीं है, आप सभी एक साथ जा सकते हैं: 'mutate_all (df, funs (dense_rank (desc (।)))) ' – Gregor

+0

धन्यवाद ग्रेगोर, मैंने जवाब अपडेट किया। –

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