Find max per group and return another column

Viewed 5690

Given the following test matrix:

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

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

Here I want to find the max per group and then return the name of that column. E.g. I would expect 1, A and 2, C. If there is a tie with max, the first match would be fine. After that I would have to attach this to the matrix with a new Column "GroupName"

How can I do this?

I already have the Group, Max Value combination:

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

The way I used to add columns to my matrix works like this (let's assume there is also already a matrix groupNames with GroupID, Name combinations):

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