Une façon consiste à trier les données en sens inverse et duplicatedà supprimer tous les doublons. Pour moi, cette méthode est conceptuellement plus simple que celles qui s'appliquent. Je pense que ça devrait aussi être très rapide.
# 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
Edit: Je viens de réaliser que le tri inversé ci-dessus n'a même pas besoin d'être trié du idtout. Vous pouvez simplement utiliser à la z[order(z$var, decreasing=TRUE),]place et cela fonctionnera aussi bien.
Une dernière pensée ... Si la varcolonne est numérique, il existe un moyen simple de trier de manière idascendante, mais vardescendante. Cela élimine la nécessité du tri à la fin (en supposant que vous vouliez même qu'il soit trié).
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