我有两组数据框,我正在尝试创建一个函数,它将数据框和行名称作为参数,并返回行中的三个最高值(按降序排列)和三个最高值的列。
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)
}
}
此函数现在将返回该行中的最大值以及列名。但是,我现在不知道如何将第二个和第三个最高值添加到函数中。
最佳答案
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 的数据框。
关于r - 返回R中行中三个最高值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756889/