একটি উপায় হ'ল ডেটাটিকে বিপরীত-অনুসারে বাছাই করা এবং 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