返回R中行中三个最大值的函数

问题描述 投票:0回答:3

我有两组数据框,我正在尝试创建一个函数,该函数接受数据框和行名作为参数,并返回行上的三个最大值(按降序排列)和列名最高的三个值。


    set.seed(0)
    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))
    row.names(df)<-c("R1","R2","R3","R4","R5")

    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))
    row.names(df2)<-c("R6","R7","R8","R9","R10")

    print(df)

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

    print(df2)

        E F G H
    R6  2 2 5 8
    R7  5 4 6 2
    R8  6 2 2 7
    R9  1 5 7 4
    R10 4 1 3 1

以下是结果示例:

让函数为maxthree。现在


    maxthree(df2, "R7")

    G E F
    6 5 4

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


    maxthree <- function(data,row) {
      if(!row %in% rownames(data)) {
        print("Check value")
      } else { 
        max_col <- which.max(data[row,])
        print(max_col)
      }
    }

该函数现在将返回该行的最大值以及列名。但是,我现在不知道如何向函数添加第二和第三高值。

r function dataframe max row
3个回答
0
投票

尝试一下:

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))
row.names(df)<-c("R1","R2","R3","R4","R5")

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))
row.names(df2)<-c("R6","R7","R8","R9","R10")

maxthree <- function(data,row) {
  named_vec <- t(data)[,row]
  return(sort(named_vec, decreasing = T)[1:3])
}

maxthree(df2, "R7")

# G E F 
# 6 5 4

0
投票
maxthree = function(data, row) {
  data[row, order(unlist(data[row, ]), decreasing = TRUE)[1:3]]
}

maxthree(df2, "R7")
#    G E F
# R7 6 5 4

结果是一个1x3数据帧。


0
投票

这应该很好用

maxthree <- function(data,roww){
    x <- data[roww,] 
    x[order(x, decreasing = T)][1:3]
}


>  maxthree(df2, "R7")
   G E F
R7 6 5 4
© www.soinside.com 2019 - 2024. All rights reserved.