如何基于数据收集日期保留DataFrame中每个ID的最早记录?
解决方法:保留每个ID对应的最早日期记录
前提准备
首先需要将date列转换为日期格式,否则无法正确比较日期先后:
df$date <- as.Date(df$date)
方法一:Base R 实现
通过排序+去重的方式,保留每个ID的第一条最早记录:
# 按ID升序、日期升序排序数据框 df_sorted <- df[order(df$ID_number, df$date), ] # 移除重复的ID,仅保留每个ID的第一条(即最早日期)记录 result_base <- df_sorted[!duplicated(df_sorted$ID_number), ]
方法二:dplyr 包实现(更直观)
借助dplyr的分组筛选功能,直接提取每个ID的最小日期对应记录:
library(dplyr) result_dplyr <- df %>% mutate(date = as.Date(date)) %>% # 转换日期格式 group_by(ID_number) %>% # 按ID分组 filter(date == min(date)) %>% # 筛选每组中日期最早的行 ungroup() # 取消分组
注:如果同一ID存在多条日期完全相同的最早记录,
dplyr方法会保留所有符合条件的行;Base R方法则仅保留排序后的第一条,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

