如何在R中按多条件识别并去除重复数据
在R中处理含NA的重复数据:保留最新日期+人工核对NA组
原始数据
先准备示例数据并转换日期格式:
df <- data.frame(id = c("a", "a", "b","b", "c","c"), date = c("2023-05-16", "2023-08-21", "2023-06-05", NA, "2023-05-07", "2023-05-20")) library(lubridate) df$date <- ymd(df$date)
转换后的数据如下:
id date 1 a 2023-05-16 2 a 2023-08-21 3 b 2023-06-05 4 b <NA> 5 c 2023-05-07 6 c 2023-05-20
步骤1:提取需人工核对的重复组
提取所有id组内存在NA日期的完整组,用于人工判断保留行:
# 找出所有包含NA的id na_ids <- unique(df$id[is.na(df$date)]) # 提取这些id的所有行 manual_check_df <- df[df$id %in% na_ids, ]
得到的人工核对数据集:
id date 1 b 2023-06-05 2 b <NA>
步骤2:自动处理无NA的重复组,保留最新日期
筛选出无NA日期的id组,按id分组后保留每个组内日期最新的记录:
# 筛选出不在na_ids里的行 auto_process_df <- df[!df$id %in% na_ids, ] # 按id分组,保留每个组中date最大的行 library(dplyr) final_auto_df <- auto_process_df %>% group_by(id) %>% filter(date == max(date)) %>% ungroup()
自动处理后的结果:
id date 1 a 2023-08-21 2 c 2023-05-20
后续操作
待人工完成manual_check_df的行选择后,可将处理后的结果与final_auto_df合并,得到最终的去重数据集:
# 假设人工处理后得到manual_final_df,合并数据 final_df <- bind_rows(final_auto_df, manual_final_df)
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

