एक तरीका डेटा को रिवर्स-सॉर्ट करना और duplicatedसभी डुप्लिकेट को छोड़ने के लिए उपयोग करना है। मेरे लिए, यह विधि उन लोगों की तुलना में वैचारिक रूप से सरल है जो उपयोग करते हैं। मुझे लगता है कि यह बहुत तेज होना चाहिए।
# Some data to start with:
z <- data.frame(id=c(1,1,2,2,3,4),var=c(2,4,1,3,5,2))
# id var
# 1 2
# 1 4
# 2 1
# 2 3
# 3 5
# 4 2
# Reverse sort
z <- z[order(z$id, z$var, decreasing=TRUE),]
# id var
# 4 2
# 3 5
# 2 3
# 2 1
# 1 4
# 1 2
# Keep only the first row for each duplicate of z$id; this row will have the
# largest value for z$var
z <- z[!duplicated(z$id),]
# Sort so it looks nice
z <- z[order(z$id, z$var),]
# id var
# 1 4
# 2 3
# 3 5
# 4 2
संपादित करें: मुझे अभी पता चला है कि ऊपर दिए गए रिवर्स सॉर्ट को बिल्कुल भी सॉर्ट करने की आवश्यकता नहीं है id। आप z[order(z$var, decreasing=TRUE),]इसके बजाय बस का उपयोग कर सकते हैं और यह भी काम करेगा।
एक और सोचा ... अगर var कॉलम संख्यात्मक है, तो सॉर्ट करने का एक सरल तरीका है कि idआरोही है, लेकिन varअवरोही है। यह अंत में छंटनी की आवश्यकता को समाप्त करता है (यह मानते हुए कि आप इसे क्रमबद्ध करना चाहते थे)।
z <- data.frame(id=c(1,1,2,2,3,4),var=c(2,4,1,3,5,2))
# Sort: id ascending, var descending
z <- z[order(z$id, -z$var),]
# Remove duplicates
z <- z[!duplicated(z$id),]
# id var
# 1 4
# 2 3
# 3 5
# 4 2