如何移除DataFrame中因过滤丢失首次记录的个体?
高效移除因过滤丢失首次记录的个体
核心思路
先识别出首次操作记录年份为2013年的个体,再从2013年的操作记录中仅保留这类个体的数据,以此自动排除那些首次记录被过滤掉的个体(如示例中的Person_ID=123)。
方法一:使用dplyr(适合中等规模数据集)
library(dplyr) library(lubridate) # 转换日期格式并提取年份 df_clean <- df %>% mutate(Procedure_Date = mdy(Procedure_Date), year = year(Procedure_Date)) # 筛选出首次记录年份为2013的个体ID valid_persons <- df_clean %>% group_by(Person_ID) %>% summarize(first_year = min(year)) %>% filter(first_year == 2013) %>% pull(Person_ID) # 生成最终数据集 final_df <- df_clean %>% filter(year == 2013, Person_ID %in% valid_persons) # 查看结果 dput(final_df)
方法二:使用data.table(适合超大规模数据集)
data.table的操作效率远高于基础R和dplyr,更适合处理百万级以上的大表:
library(data.table) library(lubridate) # 转换为data.table格式 setDT(df) # 处理日期并提取年份 df[, Procedure_Date := mdy(Procedure_Date)][, year := year(Procedure_Date)] # 筛选符合条件的个体ID valid_persons <- df[, .(first_year = min(year)), by = Person_ID][first_year == 2013, Person_ID] # 生成最终数据集 final_df <- df[year == 2013 & Person_ID %in% valid_persons] # 查看结果 dput(final_df)
运行上述代码后,最终得到的final_df将只保留Person_ID=444的2013年记录,完全符合需求。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

