r - 创建返回行名和最大值的函数
问题描述
我有两个不同的数据框
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
但是,此函数仅打印出整列中最高值的行号(甚至不是行名),我不知道如何使该函数将类型和类别考虑在内。
解决方案
Type
您可以找到或Category
的列grep
和colnames
。然后你只需要 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
推荐阅读
- python - SparkSubmitOperator 部署模式
- php - 如何拒绝直接访问我网站上的 php 文件
- java - 如何以另一种方式在场景中加载图像?JavaFX
- javascript - React JS,HTML音频标签未加载音乐文件
- mysql - 以下查询的查询是什么?
- kotlin - Android Studio:Gradle 同步失败:无法下载 tink
- dart - Dart 的垃圾收集器可以处理循环引用吗?
- html - Django xhtml2pdf - 空白下划线
- javascript - Clearcache 未定义
- python - 当某些目标是 TensorFlow 模型中的 NaN 时,如何测量每个目标的准确度