You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中解决多配偶家庭的成员亲属关系精准匹配问题

解决一夫多妻家庭中子女与母亲的精准匹配问题

针对你150万条记录的数据集,要解决一夫多妻家庭里子女和对应母亲的匹配问题,我们可以结合行邻近性、年龄差和living.children字段实现精准匹配,具体方案如下:

核心思路

  • 按家庭分组后,基于行顺序给每个成员标记所属的"母亲组":每个配偶(relationship=2)对应其之后直到下一个配偶出现前的所有子女(relationship=3)。
  • 用年龄差过滤不符合逻辑的匹配(母亲年龄需比子女至少大15岁,确保生育合理性)。
  • 结合living.children字段验证匹配数量,避免超出母亲实际存活子女数。

实现代码

library(tidyverse)

# 加载示例数据
sample <- tibble( 
    household.ID = c(11015015988, 11015015988, 11015015988 , 
                     11015015988 , 11015015988, 
                     11015015988, 11015015988, 11015015988,228979641, 
                     228979641, 228979641 ,228979641),
    member.ID= c(1101502683 ,11015026954,11015027098,11015027231 
                 ,11015027353,11015027484 
                 ,11015027615 ,11015027751,228992311,228996137,229001877,229005869),
    relationship = c(1,2,3,3,3,3,2,3,1,3,2,2),
    gender = c(1,2,1,2,1,1,2,2,1, 2, 2 , 2),
    age = c(54,54,30,26,23,31,20,2, 60,12,34,62),
    marriage.status= c(1,1,4,4,4,1,1,NA, 1, 4, 1,1),
    children.ever.born= c(NA,8,NA,NA,NA,NA,1,NA,NA,NA,1,1),
    living.children  = c(NA,8,NA,NA,NA,NA,1,NA,NA,NA,1,1)
)

# 精准匹配子女与母亲
matched_data <- sample %>%
    group_by(household.ID) %>%
    # 生成母亲组标记:每遇到一个配偶就新建组,子女继承最近的配偶组
    mutate(mother_group = cumsum(relationship == 2)) %>%
    # 筛选配偶和子女数据
    filter(relationship %in% c(2,3)) %>%
    group_by(household.ID, mother_group) %>%
    # 提取当前组内的母亲信息
    mutate(
        member.ID.mother = first(member.ID[relationship == 2]),
        mother_age = first(age[relationship == 2]),
        mother_living_children = first(living.children[relationship == 2])
    ) %>%
    # 仅保留子女记录
    filter(relationship == 3) %>%
    # 过滤年龄差不合理的匹配(母亲至少比子女大15岁)
    filter(age <= mother_age - 15) %>%
    # 限制匹配子女数不超过母亲的存活子女数
    group_by(household.ID, member.ID.mother) %>%
    slice(1:mother_living_children) %>%
    # 保留需要的字段
    select(household.ID, member.ID, relationship, gender, age, marriage.status, 
           children.ever.born, living.children, member.ID.mother) %>%
    ungroup()

# 查看匹配结果
print(matched_data)

代码细节说明

  • 母亲组标记:通过cumsum(relationship == 2)实现行邻近性匹配,确保每个子女归到最近的上一个配偶组。
  • 年龄过滤:age <= mother_age -15条件排除了生育逻辑不合理的匹配(比如示例中20岁母亲对应2岁子女符合要求,若出现年龄差小于15的情况会被过滤)。
  • 数量限制:slice(1:mother_living_children)保证每个母亲匹配的子女数不超过其living.children数值,避免过度匹配。

大数据集优化建议

针对150万条记录的规模,可做以下优化:

  • 改用data.table替代dplyr,大幅提升运算速度,逻辑可直接迁移。
  • 先按household.ID对数据集排序,确保行顺序的准确性(这是行邻近性匹配的核心前提)。
  • 分批次处理数据,避免内存溢出。

内容的提问来源于stack exchange,提问作者Azam Mirzaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:02:08