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

双重差分(Difference in Differences)处理虚拟变量R生成方法咨询

基于tidyverse的处理变量生成方案

前置准备

首先加载tidyverse套件:

library(tidyverse)

你提供的测试数据集可以直接用如下代码加载:

df <- structure(list(id = c(1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5, 5, 6, 
7, 8, 9, 9, 9, 9), year = c(2002, 2003, 2004, 2005, 2002, 2006, 
2009, 2010, 2006, 2009, 2010, 2011, 2012, 2006, 2007, 2006, 2010, 
2011, 2012), network = c(200, 250, 250, 250, 100, 400, 400, 220, 
105, 70, 135, 200, 102, 0, 0, 0, 50, 150, 150), treat = c(0, 
1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0)), class = "data.frame", row.names = c(NA, 
-19L))

核心实现代码

df <- df %>%
  # 按个体ID分组,仅比较同一个体的不同年份数据
  group_by(id) %>%
  # 强制同组内按年份升序排序,避免原始数据年份乱序导致计算错误
  arrange(year, .by_group = TRUE) %>%
  # 生成处理虚拟变量
  mutate(
    treat_new = as.integer(network > lag(network, default = Inf))
  ) %>%
  # 取消分组
  ungroup()

代码逻辑说明

  • 用lag(network)取同一个体上一观测年份的network值,分组内的第一个观测没有上一期,我们把默认值设为无穷大Inf,保证第一个观测的判断结果为0
  • 直接比较当前年份network是否大于上一期值,逻辑值转整数后正好符合你要求的1/0规则
  • 生成的treat_new列和你示例中给出的treat列完全一致,可直接用于后续双重差分分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:15:00