R语言中如何为满足特定轮次条件的个体生成全轮次处理标识
实现方法
方法1:tidyverse(dplyr)方案
按个体ID分组后,判断该ID前3轮的福利领取哑变量是否全部为1,将判断结果同步到该ID所有行:
library(dplyr) # 先确保数据按ID和轮次排序 df <- df %>% arrange(personal_ID, wave) %>% group_by(personal_ID) %>% mutate(benefit_1_through_3 = as.integer(all(benefit_dummy_by_wave[1:3] == 1))) %>% ungroup()
如果担心轮次顺序问题,也可以直接指定轮次名称判断:
df <- df %>% group_by(personal_ID) %>% mutate(benefit_1_through_3 = as.integer(all(benefit_dummy_by_wave[wave %in% paste0("wave",1:3)] == 1))) %>% ungroup()
方法2:base R方案
用ave函数实现分组计算,逻辑和上面一致:
# 先按ID和轮次排序 df <- df[order(df$personal_ID, df$wave), ] # 生成跨全轮次的处理组标识 df$benefit_1_through_3 <- as.integer( ave(df$benefit_dummy_by_wave, df$personal_ID, FUN = function(x) all(x[1:3] == 1)) )
两种方法都可以直接适配你最多10轮的全量调研数据,不需要修改核心判断逻辑。
内容的提问来源于stack exchange,提问作者Grant
相关产品推荐
相关产品推荐

