在数据帧上应用 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))
所以我正在尝试学习 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))