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

R语言dplyr按ID分组筛选Status=1003的最新日期生成数据集

问题根因
  • 你代码中使用的subset()是R基础函数,无法识别dplyr中group_by()生成的分组属性,不会按分组维度执行筛选
  • 代码缺失「提取每个ID对应最新日期」的核心处理逻辑,仅完成了状态过滤、字段选择和重命名操作,因此会返回所有Status='1003'的全量记录
正确实现代码

推荐使用dplyr原生函数按流程处理,性能更好且逻辑可控:

library(dplyr)

desired <- table1 %>%
  # 提前过滤Status='1003'的记录,缩小后续处理的数据量
  filter(Status == '1003') %>%
  # 若Date为字符串格式,先取消下一行注释转为标准日期类型,避免比较错误
  # mutate(Date = as.Date(Date)) %>%
  # 按ID字段分组
  group_by(ID) %>%
  # 筛选每个分组下Date为最大值(即最新日期)的记录
  filter(Date == max(Date, na.rm = TRUE)) %>%
  # 选择输出字段,同时将Date重命名为New
  select(ID, New = Date) %>%
  # 移除分组属性,避免干扰后续数据操作
  ungroup()
特殊场景适配

如果同一个ID存在多条记录的Date等于最新日期(即重复最新日期),且你只需要每个ID返回唯一一条最新日期结果,可以直接用聚合逻辑实现,自动去重:

library(dplyr)

desired <- table1 %>%
  filter(Status == '1003') %>%
  # mutate(Date = as.Date(Date)) %>%
  group_by(ID) %>%
  # 直接聚合得到每个ID对应的最新日期,返回结果天然唯一
  summarise(New = max(Date, na.rm = TRUE), .groups = "drop")

针对你给出的测试数据,上述两种写法最终返回的结果都为:

IDNew
0012021-04-21
0022021-07-21

Status为1004的ID=003不会出现在结果中,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:09:25