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

如何为单列生成唯一行名以解决R语言plm回归重复行名报错

报错核心原因

你修改原数据行名的操作无法解决问题,pdata.frame报错的核心是你指定的两个索引列NAME和DATE存在重复的组合值,plm要求面板数据的每一条观测对应唯一的个体+时间配对,该校验逻辑和原data.frame的行名无关。

另外你给出的示例数据本身存在笔误:

  • NAME列定义时缺少逗号:c("A", "G", "N", "L",'L' "L") 应为 c("A", "G", "N", "L","L", "L")
  • 各列长度不一致:DATE、NAME、LCR列是6个元素,MWFR和reg列是8个元素,真实数据的核心问题仍为NAME+DATE组合重复。

解决步骤

方案1:直接去重(适用于重复观测为冗余数据的场景)

保留每个NAME+DATE组合的第一条观测即可:

# 方法1:dplyr实现
library(dplyr)
data_clean <- data %>% 
  distinct(NAME, DATE, .keep_all = TRUE)

# 方法2:基础R实现
data_clean <- data[!duplicated(data[,c("NAME", "DATE")]), ]

方案2:聚合重复观测(适用于重复观测为有效数据的场景)

如果重复的观测需要纳入统计,先按NAME+DATE分组聚合后再做回归,常见聚合方式包括求均值、求和、取中位数等,以下是按均值聚合的示例:

library(dplyr)
data_clean <- data %>%
  group_by(NAME, DATE) %>%
  summarise(
    # 可根据业务需求调整为sum/median等聚合函数
    LCR = mean(LCR, na.rm = TRUE),
    MWFR = mean(MWFR, na.rm = TRUE),
    reg = mean(reg, na.rm = TRUE),
    .groups = "drop"
  )

运行回归

处理完数据后再运行面板回归即可,另外你的回归公式写法可以简化:MWFR*reg会自动生成主效应和交互项,无需重复声明:

library(plm)
pdata <- pdata.frame(data_clean, index = c("NAME", "DATE"))
regmodelfix <- plm(LCR ~ MWFR*reg, model ='within', data=pdata, effect = 'twoways')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:04