如何用R语言dplyr包的filter函数筛选获胜队伍玩家信息
解决方案
假设你的原数据框名为game_data,包含列:season(赛季编号)、team_color(玩家所属队伍颜色)、player_name(玩家姓名)、death_time(死亡时间,未死亡玩家为NA);你的获胜队伍数据框Winners包含列:season、winning_color(该赛季获胜队伍的颜色)。
步骤1:关联原数据与获胜队伍信息
通过赛季字段将两个数据框关联,确保每个玩家都能匹配到所在赛季的获胜队伍颜色:
library(dplyr) joined_data <- game_data %>% inner_join(Winners, by = "season")
步骤2:筛选获胜队伍的所有玩家
筛选出玩家所属队伍颜色与对应赛季获胜颜色一致的记录,保留所有获胜队伍成员(无论是否提前死亡):
winning_players <- joined_data %>% filter(team_color == winning_color)
步骤3:处理死亡时间并排序
将未死亡玩家的death_time替换为"N/A",再按赛季分组,每组内按死亡时间排序(已死亡玩家按时间先后排列,未死亡玩家排在最后):
final_table <- winning_players %>% mutate(death_time = if_else(is.na(death_time), "N/A", as.character(death_time))) %>% group_by(season) %>% arrange(death_time, .by_group = TRUE) %>% ungroup() %>% select(season, player_name, death_time) # 保留需要的核心列
关键说明
inner_join确保仅保留存在对应获胜记录的赛季数据,避免赛季与获胜队伍颜色不匹配的问题。filter(team_color == winning_color)实现了赛季与获胜队伍颜色的精准匹配,不会出现跨赛季颜色混淆。- 分组排序逻辑保证每个赛季内的玩家单独排序,未死亡玩家因转为字符串"N/A",默认会排在数字/时间格式的死亡时间之后,符合需求。
如果你的death_time是时间格式(如POSIXct),转换为字符串时可使用format(death_time, "%Y-%m-%d %H:%M")指定显示格式,避免默认格式混乱。
内容的提问来源于stack exchange,提问作者Logan W.
相关产品推荐
相关产品推荐

