在数据帧上应用 which.max 的更好方法

Better way to apply which.max over dataframe

所以我正在尝试学习 R,同时使用来自 https://www.kaggle.com/abcsds/pokemon

的数据集
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))