如何在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)
代码逻辑说明
- 分组:使用
group_by(Player)将数据按球员分组,确保每个球员的所有记录被归为一组。 - 条件筛选:
- 先判断当前球员组的
Team列是否包含"TOT"("TOT" %in% Team) - 若包含TOT,仅保留
Team == "TOT"的行(即该球员的总计记录) - 若不包含TOT(说明该球员仅效力一支球队),则保留组内所有行
- 先判断当前球员组的
- 取消分组:用
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
相关产品推荐
相关产品推荐

