首页 > 解决方案 > 在数据帧上应用 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 之类的东西来获取所有行,而无需依次遍历它们?

标签: rdata-science

解决方案


我相信这是您想要实现的目标

我使用tidyverse这个,因为数据是宽格式的,不同的列用于统计,我首先使用统计列和每个组的最大值将其转换为长格式pivot_longergroup_by达到filter所需的结果。

library(tidyverse)
df %>% 
  select(c(2, 5:11)) %>% 
  pivot_longer(-1, names_to = "stats") %>% 
  group_by(stats) %>% 
  filter(value == max(value))

推荐阅读