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

如何在R中按分组依据保留最新日期行、去除重复旧行?

问题分析

你的代码失效的核心原因是**date列是字符类型而非日期类型**,slice_max()会按字符串的字典序排序,而非实际的日期先后顺序。比如字符"2019"会被判定为比"2023/10/24"更大(字符串比较到第4位时"9">"3"),导致错误保留旧数据;另外像"2023/9/24"和"2023/10/24"这类日期,字符串排序也会出现逻辑错误。

解决方案

先将date列转换为标准日期格式,再按分组保留最新日期的记录:

library(tidyverse)
library(lubridate) # 用于便捷处理多格式日期

df_join <- rbind(df1, df2)

df_clean <- df_join %>%
  # 将字符型date转换为日期格式,自动识别"YYYY"和"YYYY/MM/DD"两种输入格式
  mutate(date = parse_date_time(date, orders = c("Y", "Y/m/d"))) %>%
  # 按指定维度分组
  group_by(Sector, block, lot, units) %>%
  # 保留每组中日期最新的行,with_ties=FALSE确保同一分组仅留一行
  slice_max(date, with_ties = FALSE) %>%
  ungroup() # 取消分组状态,避免后续操作异常

# 查看清理后的结果
print(df_clean)
关键说明
  • 如果不想额外加载lubridate包,也可以用基础R实现日期转换:date = as.Date(date, tryFormats = c("%Y/%m/%d", "%Y")),效果一致。
  • 若你的数据中同一分组可能存在多个相同的最新日期,可将with_ties = FALSE改为TRUE,或添加额外筛选条件(比如按其他字段排序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:40