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

R语言按id因子分组提取每组最早日期对应行的实操问题

R语言按分组提取每组最早日期对应行的代码修正方案

原有代码问题分析

  • 仅使用mutate(fch = min(fch))只会将分组内所有行的日期统一替换为组内最早日期,没有做行筛选,最终仍会返回全部15行数据,不符合提取单行的需求
  • 管道操作中不需要额外指定data$fch,直接引用列名即可,否则会调用原始全量数据的列,容易出现逻辑错误

修正后可直接运行的代码

推荐使用dplyr内置的slice_min()函数实现,代码简洁且符合需求:

library(dplyr)

DF1 <- data %>%
  # 将字符日期转为日期格式
  mutate(fch = as.Date(fch, format = "%d/%m/%Y")) %>%
  # 按id分组
  group_by(id) %>%
  # 提取每组日期最小的1行,with_ties=FALSE表示若有多个相同最早日期仅取第一行,匹配你的预期结果
  slice_min(fch, n = 1, with_ties = FALSE) %>%
  # 若需要保留原始的日/月/年字符串格式可保留此行,不需要直接删除即可
  mutate(fch = format(fch, "%d/%m/%Y")) %>%
  ungroup()

逻辑等价的filter实现方案(方便理解原理)

如果你想更清晰理解筛选逻辑,可以用filter写法:

library(dplyr)

DF1 <- data %>%
  mutate(fch = as.Date(fch, format = "%d/%m/%Y")) %>%
  group_by(id) %>%
  # 筛选出日期等于组内最小日期的行
  filter(fch == min(fch)) %>%
  # 若有多个重复最早日期仅保留第一行
  slice(1) %>%
  mutate(fch = format(fch, "%d/%m/%Y")) %>%
  ungroup()

两种方案运行后得到的DF1和你给出的预期data_result完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:36:06