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

面板数据中如何基于首次观测值填补社会阶级变量后续缺失值

问题原因

你之前使用的first(class)仅提取每个个体第一行的class取值,若个体第一期就是缺失值(你数据中用.表示),后续所有行的插补结果都会是缺失,无法匹配需求。

实现代码

library(dplyr)

df_imputed <- df %>%
  group_by(id) %>%
  mutate(
    # 标记非缺失记录
    valid_flag = class != ".",
    # 提取个体首次出现的有效class值
    first_class = first(class[valid_flag], default = "."),
    # 提取首次有效class对应的波次
    first_wave = first(wave[valid_flag], default = Inf),
    # 按规则生成插补结果:首次观测波次及之后用首次值,之前保留缺失
    class_imputed = if_else(wave >= first_wave, first_class, as.character(class))
  ) %>%
  # 移除中间计算用的辅助列,可根据需要保留
  select(-valid_flag, -first_class, -first_wave) %>%
  ungroup()

逻辑说明

  • 按id分组保证所有计算都在单个个体的时间序列内完成
  • 优先定位每个个体第一次出现非缺失class的时间点和对应取值
  • 逐行判断当前波次是否在首次有效观测的时间点之后(含当期),符合条件则用首次值填充,否则保留原有缺失
  • 若某个体全程无有效class观测,默认返回原缺失值,不会抛出错误

适配说明

如果你的数据中缺失值是R标准NA而非自定义的.,只需将valid_flag = class != "."替换为valid_flag = !is.na(class)即可通用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:30:02