如何转换DDMMMYYYY格式字符串日期并筛选每人最新记录?
解决分组筛选每人最新日期记录的问题
你的问题核心是日期列未正确转换为日期类型,直接按字符串排序会触发逻辑错误(比如字符串排序时15MAR2020会比31DEC2020靠后,但实际日期更早)。无需拆分日期列,用as.Date()配合正确格式参数就能快速解决:
步骤1:转换日期格式
你的日期格式是日+英文月份缩写+年(如01JAN2021),对应格式符为%d%b%Y:
%d:两位数字的日%b:英文月份缩写(JAN/FEB等)%Y:四位数字的年
若你的R环境默认locale不是英文,可能导致转换失败,临时设置英文locale即可:
# Windows系统设置英文locale,mac/Linux可跳过或用对应命令 Sys.setlocale("LC_TIME", "English") # 转换日期列 df$Date <- as.Date(df$Date, format = "%d%b%Y")
步骤2:分组筛选最新记录
日期转换完成后,用dplyr分组处理即可得到正确结果:
library(dplyr) # 写法1:排序后取首行 df_updated <- df %>% group_by(Person) %>% arrange(desc(Date)) %>% slice(1) # 比filter(row_number()==1)更简洁 # 写法2:直接筛选日期最大值对应的行(无需排序,效率更高) df_updated <- df %>% group_by(Person) %>% filter(Date == max(Date))
最终结果
处理后的数据将保留每人最新日期的记录:
| Person | Date |
|---|---|
| Alex | 2022-07-15 |
| Beth | 2020-12-31 |
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

