首页 > 解决方案 > 创建返回行名和最大值的函数

问题描述

我有两个不同的数据框

    df <- data.frame(A=c(3,2,1,4,5),B=c(1,6,3,8,4),C=c(2,1,4,8,9), D=c(4,1,2,4,6),
                     Type=c("M","M","N","J","M"))
    row.names(df)<-c("R1","R2","R3","R4","R5")


       A B C D Type
    R1 3 1 2 4  M
    R2 2 6 1 1  M
    R3 1 3 4 2  N
    R4 4 8 8 4  J
    R5 5 4 9 6  M


    df2 <- data.frame(E=c(2,5,6,1,4),F=c(2,4,2,5,1),G=c(5,6,2,7,3),H=c(8,2,7,4,1),
                      Category=c("P","M","T","N","J"))
    row.names(df2)<-c("R6","R7","R8","R9","R10")


        E F G H Category
    R6  2 2 5 8    P
    R7  5 4 6 2    M
    R8  6 2 2 7    T
    R9  1 5 7 4    N
    R10 4 1 3 1    J

我正在尝试创建一个函数,该函数将数据框、列和类别或类型作为参数,并返回属于类别/类型和行名的列上的最大值。

让函数为lookup。这是我想要的结果示例:


lookup(df, "B", "M")

6, R2

其中 6 是类型 M 的 B 列中的最大值。

这是我到目前为止所得到的:


    lookup<-function(data,col,row) {
      maxrow<-which.max(data[,col])
      print(maxrow)
    }

    lookup(df, "B", "M")

    4


但是,此函数仅打印出整列中最高值的行号(甚至不是行名),我不知道如何使该函数将类型和类别考虑在内。

标签: rfunctiondataframemax

解决方案


Type您可以找到或Category的列grepcolnames。然后你只需要 tu 子集。如果您还想从函数中colname删除。unname

lookup <- function(data,col,row) {
  i <- which(data[,grep("Type|Category", colnames(data))]==row)
  j <- which.max(data[i, col])
  unname(data[i[j], col, drop = FALSE])
}
lookup(df, "B", "M")
#    
#R2 6

推荐阅读