给定以下测试矩阵:

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

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


在这里,我想查找每个组的最大值,然后返回该列的名称。
例如。我期望1,A和2,C。如果与max并列,则第一场比赛就可以了。
之后,我必须使用新的“ GroupName”列将其附加到矩阵

我怎样才能做到这一点?

我已经有了“组,最大价值”组合:

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


我用来向矩阵中添加列的方式是这样的(假设已经有一个具有GroupID,Name组合的矩阵groupNames):

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

最佳答案

基本解决方案,不如Dan M的简单:

testMatrix <- data.frame(GroupID = c(1,1,2), ElementID = c(10,20,30),
    Value=c(300,100,200), Name=c("A","B","C"))

A <- lapply(split(testMatrix, testMatrix$GroupID), function(x) {
        x[which.max(x$Value), c(1, 4)]
    }
)
do.call(rbind, A)

08-19 20:24