r - 在数据帧上应用 which.max 的更好方法
问题描述
所以我在玩来自https://www.kaggle.com/abcsds/pokemon的数据集时尝试学习 R
data = read.csv("Pokemon.csv")
data$Name = sub(".*(Mega)", "Mega", data$Name) # replacing name duplications
我想找到在任何列(总、攻击、HP等)上具有最大值的所有口袋妖怪:
我知道我可以这样做:sapply(data[5:11], max, na.rm = TRUE)
找出最大值和类似的东西
data[which.max(data$Total),]
data[which.max(data$HP),]
data[which.max(data$Attack),]
查找所有具有最大值的行。
有没有一种方法可以使用 sapply 之类的东西来获取所有行,而无需依次遍历它们?
解决方案
我相信这是您想要实现的目标
我使用tidyverse
这个,因为数据是宽格式的,不同的列用于统计,我首先使用统计列和每个组的最大值将其转换为长格式pivot_longer
以group_by
达到filter
所需的结果。
library(tidyverse)
df %>%
select(c(2, 5:11)) %>%
pivot_longer(-1, names_to = "stats") %>%
group_by(stats) %>%
filter(value == max(value))
推荐阅读
- python-3.x - 可以从 matplotlib 的 Figure 类的实例中获取行数和列数吗?
- api - 使用集成的 Shopware6 身份验证
- git - 如何在构建失败的情况下拒绝 git 中的提交
- html - Spacer 不接受 CSS 中的边距
- c# - HttpWebRequest 不起作用:接收时发生意外错误
- javascript - 在表单 jquery asp.net mvc 上处理的不仅仅是输入文件
- excel - 如何在日期时间的 Excel 列中突出显示某个时间范围?
- elixir - 长生不老的竹子用法
- python - 如何从 for 循环输出创建结构(例如列表)?
- assembly - 像a2f这样的分支目标是什么
在objdump反汇编中是什么意思?