如何在R中筛选指定人员2014年前最后一次完成马拉松的记录
获取A和C在2014年前最后一次成功完成马拉松的记录
以下是两种适配大数据集场景的高效解决方案,分别基于dplyr和data.table(后者在处理超大数据集时性能更优):
方法1:使用dplyr(语法直观,适合常规场景)
library(dplyr) # 替换为你的实际数据集名称和列名 result <- marathon_data %>% # 过滤目标人员、成功完成、2014年前的记录 filter(name %in% c("A", "C"), completion_status == "成功", year < 2014) %>% # 按人员分组,保留每组中年份最大的记录 group_by(name) %>% filter(year == max(year)) %>% ungroup()
方法2:使用data.table(性能优先,适配大数据集)
library(data.table) # 将数据集转换为data.table格式(若原本已是则可跳过) setDT(marathon_data) # 过滤条件+分组取最后一次记录 result <- marathon_data[name %in% c("A", "C") & completion_status == "成功" & year < 2014, .SD[year == max(year)], by = name]
注意事项
- 请根据实际数据集替换
marathon_data、name、completion_status等字段名,确保状态值(如"成功")与数据中的实际值一致。 - 若存在同一人员同年份多条成功记录,两种方法都会保留所有同年记录,若需仅保留一条,可在分组后添加
slice(1)(dplyr)或.SD[1](data.table)。
内容的提问来源于stack exchange,提问作者beavernation
相关产品推荐
相关产品推荐

