如何在R中按组检测多变量相似案例并筛选最新季度记录
在R中按组检测相似案例并筛选最新季度记录
1. 构造示例数据集
根据你提供的案例,先创建可复现的测试数据:
library(tidyverse) df <- tibble( 家庭ID = c(1, 1, 1, 2, 2), 姓名 = c("Steven Montero Jr.", "Steven Montero", "Luisa Montero", "Maria Lopez", "Maria Lopez Sr."), 季度 = c("Q1 2023", "Q2 2023", "Q1 2023", "Q3 2023", "Q4 2023"), 年龄 = c(35, 35, 32, 40, 40) )
2. 标准化姓名(识别相似案例)
针对姓名后缀(Jr./Sr.)导致的相似记录,用正则表达式统一姓名格式:
df <- df %>% mutate(标准化姓名 = str_remove(姓名, "\\s+(Jr\\.|Sr\\.)$"))
3. 转换季度为可排序格式
把Q1 2023这类文本格式转为日期,方便比较季度先后:
df <- df %>% mutate( 季度日期 = as.Date(paste0(str_replace(季度, "Q", ""), "-01"), "%q%Y-%d") )
4. 检测重复并筛选最新记录
按家庭ID和标准化姓名分组,先标记重复案例,再筛选每组内最新季度的记录:
# 标记所有重复案例 带标记数据 <- df %>% group_by(家庭ID, 标准化姓名) %>% mutate(是否重复 = n() > 1) %>% ungroup() # 筛选最新季度记录 最终结果 <- df %>% group_by(家庭ID, 标准化姓名) %>% filter(季度日期 == max(季度日期)) %>% ungroup()
结果说明
带标记数据新增了是否重复列,可快速定位同一家庭内的相似重复记录最终结果会保留每个相似组的最新季度数据:比如家庭1的Steven Montero仅保留Q2 2023的记录,家庭2的Maria Lopez仅保留Q4 2023的记录
内容的提问来源于stack exchange,提问作者Jesús Asdrúbal Molina Vázquez
相关产品推荐
相关产品推荐

