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

在R语言中如何为面板数据集生成首次资格获取标记变量?

面板数据中首次达标标记变量的实现方法

给定面板数据集df1,包含id、year和qualification字段,其中qualification从某一年首次取值为1后持续为1。我们需要生成qualification_first变量,仅在qualification首次为1的年份标记为1,其余年份为0。

示例输入数据

df1 <- data.frame(id = c("Tony"),
                  year = 2015:2020,
                  qualification = c(0, 0, 0, 1, 1, 1))

方法一:使用dplyr包(推荐,适配多id分组场景)

借助dplyr的分组功能,按id定位每组内首次达标年份,再匹配标记:

library(dplyr)

df2 <- df1 %>%
  group_by(id) %>%
  # 找到当前id下qualification为1的最小年份,匹配则标记1,否则0
  mutate(qualification_first = as.integer(year == min(year[qualification == 1], na.rm = TRUE))) %>%
  ungroup()

注:添加na.rm = TRUE可避免部分id从未达标时出现报错。

方法二:基础R实现(无需加载额外包)

通过tapply计算每组首次达标年份,再逐行匹配生成标记:

# 计算每个id的首次达标年份
first_qual_year <- tapply(
  df1$year[df1$qualification == 1], 
  df1$id[df1$qualification == 1], 
  min
)

# 生成标记变量,未达标id的所有年份自动为0
df1$qualification_first <- as.integer(df1$year == first_qual_year[df1$id])

# 得到目标数据集df2
df2 <- df1

输出结果

运行上述代码后,df2的结果如下:

> df2
     id year qualification qualification_first
1 Tony 2015             0                   0
2 Tony 2016             0                   0
3 Tony 2017             0                   0
4 Tony 2018             1                   1
5 Tony 2019             1                   0
6 Tony 2020             1                   0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:45:09