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

如何基于条件合并IPUMS微观数据中的重复行?

解决IPUMS三月样本CPS与ASEC数据合并问题

你的代码仅处理了MIGSTA1到MIGRATE1变量,完全没涉及TELWRKPAY、TELWRKHR、ASECWTH等其他需要合并的字段,所以这些变量最终全为NA。正确的思路是按受访者的唯一标识组合(CPSIDV、MONTH、YEAR)分组,对每个目标字段提取非NA有效值——每组内的两行数据中,每个目标字段只会在其中一行有值,另一行为NA。

方法一:逐个指定字段合并

library(dplyr)

merged_data <- all_ft %>%
  # 按受访者唯一标识分组
  group_by(CPSIDV, MONTH, YEAR) %>%
  summarise(
    # 提取每个字段的非NA有效值
    ASECWTH = first(na.omit(ASECWTH)),
    ASECWT = first(na.omit(ASECWT)),
    TELWRKPAY = first(na.omit(TELWRKPAY)),
    TELWRKHR = first(na.omit(TELWRKHR)),
    MIGSTA1 = first(na.omit(MIGSTA1)),
    MIGRATE1 = first(na.omit(MIGRATE1)),
    HWTFINL = first(na.omit(HWTFINL)),
    WTFINL = first(na.omit(WTFINL)),
    # 分组后自动取消分组
    .groups = "drop"
  )

方法二:用across批量处理字段

如果需要合并的字段较多,用across更简洁高效:

merged_data <- all_ft %>%
  group_by(CPSIDV, MONTH, YEAR) %>%
  summarise(
    across(
      # 列出所有需要合并的目标字段
      c(ASECWTH, ASECWT, TELWRKPAY, TELWRKHR, MIGSTA1, MIGRATE1, HWTFINL, WTFINL),
      # 提取每组内第一个非NA值(每组仅存在一个有效值)
      ~first(na.omit(.x))
    ),
    .groups = "drop"
  )

注意事项

  • 2022年之前的ASEC行中TELWRKPAY和TELWRKHR本身即为NA,合并后这些样本的对应字段依然会是NA,属于正常数据情况,不影响后续分析。
  • 若某个字段在组内两行均为NA(除上述正常情况外),合并结果也会是NA,需结合实际数据排查原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:58:08