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

面板数据清洗:移除存在数据间隔的企业样本

面板数据清洗解决方案(移除有间隔/解释变量缺失的企业)

你的原代码逻辑完全不对——它只是筛选出那些不是所有年份都覆盖2001-2019的企业,这和你要找的「数据存在间隔」完全不是一回事。下面是符合需求的代码实现:

步骤说明

我们需要两步筛选:

  1. 移除所有回归解释变量存在缺失的企业
  2. 移除所有数据年份存在间隔的企业(即年份序列不是连续的一段区间)

完整代码

假设你的回归解释变量是 var1、var2、var3(替换成你实际的变量名),代码如下:

library(dplyr)

# 1. 找出需要移除的企业:解释变量有缺失 或 数据年份有间隔
firms_to_remove <- panel_data %>%
  group_by(company_id) %>%
  # 标记两类企业:一是解释变量有缺失;二是年份序列有间隔
  mutate(
    has_missing = any(is.na(var1), is.na(var2), is.na(var3)),
    # 检查年份是否连续:排序后相邻年份差是否全为1
    has_gap = {
      sorted_years <- sort(year)
      any(diff(sorted_years) > 1)
    }
  ) %>%
  # 只要满足其中一个条件,就标记该企业需要移除
  filter(has_missing | has_gap) %>%
  pull(company_id) %>%
  unique()

# 2. 清洗数据集:移除上述企业的所有观测
clean_panel <- panel_data %>%
  filter(!(company_id %in% firms_to_remove))

代码解释

  • 解释变量缺失判断:用any(is.na(...))检查该企业是否有任何一个解释变量存在缺失值,只要有就标记。
  • 年份间隔判断:先对每个企业的年份排序,然后计算相邻年份的差值,如果有任何一个差值大于1,说明存在间隔(比如2003到2007差4,就是间隔)。
  • 最后把两类企业的ID提取出来,从原数据中移除它们的所有观测。

特殊情况验证

  • 若企业只有2003-2007的连续数据:diff(sorted_years)结果全是1,has_gap为FALSE,只要解释变量无缺失就会保留。
  • 若企业有2001-2003,然后缺3年再2007-2019:diff(sorted_years)会出现4(2003到2007),has_gap为TRUE,会被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:08:19