如何在R语言的篮球赛事得分Data Frame中选取总分最高的球队行
嘿,我来帮你搞定这个问题!要从记录篮球赛事的Data Frame里挑出赛季总分最高的球队对应的行,有好几类实用的方法,我给你拆解一下:
Base R 原生方法
如果不想加载额外的包,用Base R就能轻松解决:
- 只取第一个最高分球队:用
which.max()定位最大值的位置
# 假设你的Data Frame叫bball_data,总分列叫total_points top_single_team <- bball_data[which.max(bball_data$total_points), ]
⚠️ 注意:如果有多个球队总分并列第一,这个方法只会返回排在最前面的那一支。
- 取出所有并列最高分的球队:先拿到最高分,再用逻辑索引匹配
# 先计算总分的最大值(na.rm=TRUE处理可能存在的NA值) max_total <- max(bball_data$total_points, na.rm = TRUE) # 筛选出总分等于最大值的所有行 top_all_teams <- bball_data[bball_data$total_points == max_total, ]
这个方法会把所有和最高分持平的球队都捞出来,适合有并列第一的场景。
dplyr 简洁方法(推荐)
如果你习惯用tidyverse生态,dplyr的代码会更直观易读:
先确保已经加载包:
library(dplyr)
- 用filter匹配最大值
top_teams <- bball_data %>% filter(total_points == max(total_points, na.rm = TRUE))
- 用slice_max更直接
# 只取1支最高分球队 top_single_team <- bball_data %>% slice_max(n = 1, order_by = total_points, na.rm = TRUE) # 取出所有并列第一的球队(默认with_ties=TRUE,可省略) top_all_teams <- bball_data %>% slice_max(order_by = total_points, na.rm = TRUE)
举个实际例子
比如我们构造一个测试数据集:
bball_data <- data.frame( team = c("湖人", "勇士", "凯尔特人", "雄鹿"), total_points = c(8200, 8350, 8350, 8100) ) # 用slice_max取出所有并列第一的球队 bball_data %>% slice_max(order_by = total_points)
运行后会返回勇士和凯尔特人这两行,完美符合需求!
最后提醒一句:如果你的总分列是字符类型,记得先转成数值型(as.numeric()),不然max()函数会出错哦~
内容的提问来源于stack exchange,提问作者R.Kim
相关产品推荐
相关产品推荐

