在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
相关产品推荐
相关产品推荐

