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

如何在R中根据列筛选df:保留多队球员TOT行及单队球员数据

解决方案:筛选NBA球员数据中的总计行与单队记录

针对你的需求,我们可以通过按球员分组后条件筛选的方式,同时保留有总计(TOT)行球员的TOT记录,以及仅效力单队球员的全部记录。以下是具体实现:

完整代码示例

library(dplyr)

# 示例数据集
data_frame <- data.frame(
  Player = c("Luka","Steph","Anderson","Anderson","Anderson"), 
  Games= c(60, 59, 42, 30, 12), 
  Team= c('Dallas', 'Warriors', 'TOT', 'CLE', 'IND')
)

# 核心处理逻辑
data_frame_mod <- data_frame %>%
  group_by(Player) %>%
  filter(
    # 组内有TOT则留TOT行,无TOT则留全部行
    if ("TOT" %in% Team) Team == "TOT" else TRUE
  ) %>%
  ungroup()

# 输出结果
print("Modified dataframe")
print(data_frame_mod)

代码逻辑说明

  1. 分组:使用group_by(Player)将数据按球员分组,确保每个球员的所有记录被归为一组。
  2. 条件筛选:
    • 先判断当前球员组的Team列是否包含"TOT"("TOT" %in% Team)
    • 若包含TOT,仅保留Team == "TOT"的行(即该球员的总计记录)
    • 若不包含TOT(说明该球员仅效力一支球队),则保留组内所有行
  3. 取消分组:用ungroup()将分组数据转回普通数据框格式,方便后续操作。

替代实现方式(更直观)

如果觉得条件判断不够直观,可以先给每个球员添加"是否有TOT记录"的标记,再筛选:

data_frame_mod <- data_frame %>%
  group_by(Player) %>%
  mutate(has_tot = "TOT" %in% Team) %>%
  filter(has_tot == FALSE | Team == "TOT") %>%
  select(-has_tot) %>%
  ungroup()

两种方式都能得到你期望的输出:

[1] "Modified dataframe"
    Player Games    Team
1    Luka    60  Dallas
2   Steph    59 Warriors
3 Anderson    42     TOT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:30:52