Encuentra max por grupo y devuelve otra columna

Dada la siguiente matriz de prueba:

testMatrix <- matrix( c(1,1,2,10,20,30,300,100,200,"A","B","C"), 3, 4)

colnames(testMatrix) <- c("GroupID", "ElementID", "Value", "Name")

Aquí quiero encontrar el máximo por grupo y luego devolver el nombre de esa columna. P.ej. Yo esperaría 1, A y 2, C. Si hay un empate con el máximo, el primer partido estaría bien. Después de eso tendría que adjuntar esto a la matriz con una nueva columna "Nombre del grupo"

¿Cómo puedo hacer esto?

Ya tengo la combinación Grupo, Valor Máx .:

groupMax <- aggregate (as.numeric(testMatrix[,3]), by=list( testMatrix[,1] ), max )

La forma en que solía agregar columnas a mi matriz funciona de esta manera (asumamos que también hay una matriz de nombres de grupo con GroupID, combinaciones de nombres):

testMatrix <- cbind ( testMatrix, groupNames[match( testMatrix[,1], groupNames[,1] ), 2] ) 

Respuestas a la pregunta(4)

Su respuesta a la pregunta