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

如何在非平衡面板数据中创建失业与非劳动力状态事件变量

非平衡面板数据中状态转换变量的创建

需求说明

  • 核心目标:基于非平衡面板数据,创建unemployed和inactive两个变量,精准标记特定状态转换事件
  • 状态编码定义:
    • 0 = 就业(employed)
    • 1 = 失业(unemployed)
    • 2 = 非劳动力(inactive)
  • 变量规则:
    • unemployed:仅当个体**从就业(0)转为失业(1)**时赋值为1,其余情况为0
    • inactive:仅当个体**从就业(0)转为非劳动力(2)**时赋值为1,其余情况为0
    • 排除规则:若个体首次观测的状态为1或2,该情况不视为转换事件
    • 缺失波次不影响:即使个体中间缺失若干观测波次,只要前后有效观测满足转换规则,仍标记为事件(如id=1缺失wave3、4,wave5从0转1,仍标记unemployed=1)

预期输出

id wave status unemployed inactive
1   1    1      0          0        0
2   1    2      0          0        0
3   1    5      1          1        0
4   2    1      0          0        0
5   2    2      0          0        0
6   3    1      0          0        0
7   3    2      2          0        1
8   3    3      1          0        0
9   4    1      0          0        0
10  4    2      2          0        1
11  4    4      0          0        0
12  5    1      2          0        0
13  5    3      0          0        0
14  5    5      1          1        0
15  5    6      1          0        0
16  6    1      1          0        0
17  6    3      2          0        1
18  6    5      2          0        0

原始数据结构

df=structure(list(id = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 
5, 5, 6, 6, 6), wave = c(1, 2, 5, 1, 2, 1, 2, 3, 1, 2, 4, 1, 
3, 5, 6, 1, 3, 5), status = c(0, 0, 1, 0, 0, 0, 2, 1, 0, 2, 0, 
2, 0, 1, 1, 1, 2, 2)), row.names = c(NA, -18L), class = c("tbl_df", 
"tbl", "data.frame"))

解决方案(R语言)

使用dplyr包按个体分组,通过lag()函数获取上一次观测的状态,再根据转换规则生成目标变量:

library(dplyr)

df_processed <- df %>%
  group_by(id) %>%
  mutate(
    # 标记从0到1的转换
    unemployed = ifelse(status == 1 & lag(status) == 0, 1, 0),
    # 标记从0到2的转换
    inactive = ifelse(status == 2 & lag(status) == 0, 1, 0)
  ) %>%
  # 处理首次观测为1/2的情况:将对应变量设为0(lag返回NA时自动转为0)
  mutate(
    unemployed = replace(unemployed, is.na(unemployed), 0),
    inactive = replace(inactive, is.na(inactive), 0)
  ) %>%
  ungroup()

# 查看处理后的数据
print(df_processed, n = 18)

代码说明

  1. group_by(id):确保按个体独立判断状态转换
  2. lag(status):获取同个体上一次观测的状态值,自动跳过缺失的波次
  3. ifelse():根据转换规则赋值1或0
  4. replace():处理首次观测的NA值,确保首次状态非0时变量值为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:06:22