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

如何在R语言中筛选数据集每年最新日期的记录?

解决方法

问题核心是:你需要的是每年全局最新日期对应的所有记录,而非每个ID每年的最新记录,之前的分组维度(Year + ID)不符合需求,调整分组逻辑即可解决。

方案1:直接从原数据集一步处理

先确保report_dt转为日期格式,再按年份分组,筛选出等于当年最大日期的所有行:

DATA %>%
  # 统一转换日期格式,避免后续计算出错
  mutate(report_dt = as.Date(report_dt, '%m/%d/%Y'),
         Year = year(report_dt),
         Month = month(report_dt)) %>%
  # 按年份分组,找出当年的最新日期
  group_by(Year) %>%
  filter(report_dt == max(report_dt)) %>%
  # 可选:取消分组,方便后续操作
  ungroup()

方案2:基于现有中间结果处理

如果已经有了中间结果,只需按年份分组后筛选对应最大日期的行:

# 假设中间结果存储为 temp_data
temp_data %>%
  # 确保日期格式正确(如果中间结果里report_dt是字符型的话)
  mutate(report_dt = as.Date(report_dt)) %>%
  group_by(Year) %>%
  filter(report_dt == max(report_dt)) %>%
  ungroup()

为什么之前的方法无效?

  • 你之前尝试的filter(Month == max(Month))如果没先按Year分组,max(Month)会计算整个数据集的最大月份,而非当年的;
  • 如果report_dt是字符类型而非日期类型,which.max或max的计算会基于字符串排序,可能得到错误的“最新日期”,所以第一步必须确保日期格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:22:36