get.max <- function(x, in.order=F, idfield="Sid", maxfield="Wmax") { use.max <- x[sapply(split( (1:nrow(x)), x[,idfield]), function(i, x) { xi <- x[i]; ii <- i[max(xi)==xi]; ii[1] }, x = x[, maxfield]), ] if(in.order) use.max <- use.max[rev(order(use.max[, maxfield])), ] use.max }