Here is a solution using the plyr
package.
The following line of code essentially tells ddply
to first group your data by Group, and then within each group returns a subset where the Score equals the maximum score in that group.
library(plyr)
ddply(data, .(Group), function(x)x[x$Score==max(x$Score), ])
Group Score Info
1 1 3 c
2 2 4 d
And, as @SachaEpskamp points out, this can be further simplified to:
ddply(df, .(Group), function(x)x[which.max(x$Score), ])
(which also has the advantage that which.max
will return multiple max lines, if there are any).