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

R语言跨数据框匹配按规则新增个体抚养子女数字段

错误原因

你原有代码的问题出在三个地方:

  • 未做表关联直接用==跨表匹配hh_id:两个数据框行数不一致时,这种比对会按位置循环匹配,完全无法实现按家庭ID对齐的需求,极易出现匹配错位。
  • 逻辑判断优先级错误:R中&运算优先级高于|,你写的判断条件实际等价于(hh_id匹配成功且身份是父亲) OR (身份是母亲),会导致所有母亲行无论是否匹配到家庭都会被赋值子女数。
  • 列名书写错误:原数据身份列名为Sit_in、第二张表子女数列名为Number_of_children,你代码中写的Set_in、nb_child和实际列名不匹配,会直接触发对象不存在的报错。
正确实现代码

使用dplyr的左连接按家庭ID匹配子女总数,再按规则赋值即可,逻辑清晰且不会出现匹配错位问题:

library(dplyr)

# 核心处理逻辑
test1 <- test1 %>%
  left_join(test2, by = "hh_id") %>%
  mutate(
    nb_charge_of = case_when(
      Sit_in %in% c(1, 2) ~ Number_of_children,
      TRUE ~ 0
    )
  ) %>%
  # 不需要保留中间匹配的子女数字段可运行下行代码
  select(-Number_of_children)

如果存在部分家庭在test2中没有对应子女数记录的情况,可以把判断逻辑补全避免出现NA:

nb_charge_of = case_when(
  Sit_in %in% c(1,2) & !is.na(Number_of_children) ~ Number_of_children,
  TRUE ~ 0
)
处理结果示例

以你描述的样例数据为例,处理后输出如下:

hh_idSit_inAgenb_charge_of
11-1
12-1
13-0
21-2
22-2
23-0
23-0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:33:21