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

R语言时间序列数据框按组匹配列值生成虚拟变量与累计胎次

R实现女性生育史面板变量计算方案

核心思路

之前用ifelse仅判断年份是否存在,没有统计年份在子女出生列中的出现次数,所以无法识别多孩场景。直接逐行统计当前date_year在nchild1~nchild10列中的匹配次数,再基于次数赋值,累计孩次通过分组按年累加即可实现,不需要复杂嵌套判断。

可直接运行的代码

library(dplyr)

df <- df %>%
  # 按女性唯一标识分组
  group_by(id_mdob) %>%
  # 逐行计算当年生育子女数
  rowwise() %>%
  mutate(
    # 统计当前date_year在10个子女出生年份列中的匹配次数,自动忽略空值
    annual_birth_num = sum(c_across(nchild1:nchild10) == date_year, na.rm = TRUE),
    # 按规则赋值birth_in_year
    birth_in_year = case_when(
      annual_birth_num == 1 ~ 1,
      annual_birth_num >= 2 ~ 2,
      TRUE ~ 0
    )
  ) %>%
  ungroup() %>%
  # 回到分组维度,按年份升序计算累计生育孩次
  group_by(id_mdob) %>%
  arrange(date_year, .by_group = TRUE) %>%
  mutate(
    prev_parity = cumsum(annual_birth_num)
  ) %>%
  ungroup()

逻辑验证

  • 针对示例样本:id_mdob为113230821119852011的记录,nchild1、nchild2均为2001,1995年有1个子女出生
    • 1995年行annual_birth_num=1,birth_in_year=1,累计后prev_parity=1
    • 2001年行annual_birth_num=2,birth_in_year=2,累计后prev_parity=1+2=3
    • 2001年之后所有无生育的年份annual_birth_num=0,birth_in_year=0,prev_parity保持3不变
  • 自动兼容子女数不足10个时nchild列的NA值,不需要提前做缺失值填充处理
  • 如果存在同一年生育3孩及以上的极端情况,代码也会正确给birth_in_year赋值为2,累计孩次同步累加对应数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:09:39