You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的dplyr按指定数量筛选FIFA2数据集各位置顶级球员

针对南安普顿球员按位置配额筛选顶级球员的解决方案

嘿,针对你这个按不同位置配额筛选南安普顿顶级球员的需求,我给你整理了一个用dplyr实现的简单方案,步骤清晰,适合R经验有限的朋友~

核心思路

因为不同位置需要筛选的数量不一样(后卫前4、中场前4、前锋前2、门将前1),不能直接用统一的top_n(),我们需要先定义位置-配额的对应规则,再关联到数据中分组筛选。

具体代码实现

library(dplyr)

# 第一步:先筛选出南安普顿的球员
southampton_players <- fifa2 %>%
  filter(Club == "Southampton")

# 第二步:定义各位置的筛选配额规则
position_quota <- tibble(
  Grp = c("后卫", "中场", "前锋", "门将"),  # 对应你的位置分组字段
  quota = c(4, 4, 2, 1)                     # 每个位置要取的顶级球员数量
)

# 第三步:关联规则+分组筛选顶级球员(按Growth降序)
top_southampton_players <- southampton_players %>%
  # 把配额规则关联到每个球员的位置上
  left_join(position_quota, by = "Grp") %>%
  # 按位置分组
  group_by(Grp) %>%
  # 每组内按Growth降序排列(确保成长值最高的球员排在前面)
  arrange(desc(Growth), .by_group = TRUE) %>%
  # 每组取对应配额的球员数量
  slice_head(n = first(quota)) %>%
  # 取消分组状态
  ungroup() %>%
  # 移除临时的配额字段,保留原数据的字段
  select(-quota)

# 可选:按你要求的位置顺序(后卫→中场→前锋→门将)排序最终结果
top_southampton_players <- top_southampton_players %>%
  arrange(factor(Grp, levels = c("后卫", "中场", "前锋", "门将")))

代码解释

  • left_join():把每个球员的位置和对应的筛选配额绑定,确保每组知道自己要取多少人;
  • arrange(desc(Growth), .by_group = TRUE):严格按位置分组后,把成长值最高的球员排在每组最前面;
  • slice_head(n = first(quota)):因为同一位置的配额都是相同的,用first(quota)就能拿到该组需要筛选的数量;
  • 最后的arrange(factor(...)):如果你的Grp字段是字符型,默认排序可能不符合你的要求,用factor()指定层级就能强制按「后卫、中场、前锋、门将」的顺序排列结果。

内容的提问来源于stack exchange,提问作者Vegas588

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:25:18