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

R语言如何删除每组最后观测日期早于2020年的子分组

实现思路

  1. 先将日期列转换为标准日期格式,避免字符串比较出现逻辑错误
  2. 按两个分组字段聚合,若原始数据未按日期排序,先在分组内按日期升序排列
  3. 过滤掉分组内最新日期早于2020-01-01的所有分组

可运行代码

library(dplyr)
library(lubridate)

# 原始数据
df <- data.frame(
  Servicio = c("Servicio 1", "Servicio 1","Servicio 1","Servicio 1","Servicio 1","Servicio 1",
             "Servicio 2", "Servicio 2", "Servicio 2", "Servicio 2","Servicio 2","Servicio 2"),
  Subservicio = c("Sub 1","Sub 1","Sub 1","Sub 2","Sub 2","Sub 2","Sub 1","Sub 1","Sub 1","Sub 2"
                ,"Sub 2","Sub 2"),
  fecha = c("2020-01-01","2020-02-01","2020-03-01","2020-01-01","2020-02-01","2020-03-01",
          "2019-01-01","2019-02-01","2019-03-01","2020-01-01","2020-02-01","2020-03-01")
)

# 处理逻辑
df_result <- df %>%
  # 转换为日期格式,也可以用base R的as.Date(fecha, "%Y-%m-%d")
  mutate(fecha = ymd(fecha)) %>%
  group_by(Servicio, Subservicio) %>%
  # 分组内按日期升序,确保取到的最后一条是最新日期
  arrange(fecha, .by_group = TRUE) %>%
  # 仅保留最新日期>=2020年的分组
  filter(last(fecha) >= ymd("2020-01-01")) %>%
  ungroup()

结果说明

你提供的示例数据中,Servicio 2下的Sub 1分组最新日期为2019-03-01,会被整体删除,其余3个符合要求的子分组会保留全部记录。如果你只需要保留每个符合要求分组的最后一条记录,在filter代码后添加slice_tail(n=1)即可。

内容的提问来源于stack exchange,提问作者Jorge Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:01