วิธีหนึ่งคือการเรียงลำดับข้อมูลย้อนกลับและใช้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