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

R语言检测企业相对绩效评估同行组年度变更问题求助

你可以使用tidyverse系列工具完成该需求,无需额外安装专用R包,实现逻辑为按企业+财年聚合同行名单,逐期对比相邻年度的同行集合差异即可生成变更哑变量。

完整实现代码

# 加载依赖包
library(dplyr)
library(purrr)

# 你的示例数据
CIK <- c("21344","21344", "21344", "21344", "21344", "21344", "21344", "21344", "21344")
FiscalYear <- c("2013", "2014", "2015", "2016", "2017", "2014", "2015", "2016", "2017")
PeerCIK <- c("1800","1800","1800","1800","1800","21456","21456","21456","21456")
dataframe <- data.frame(CIK, FiscalYear, PeerCIK)

# 核心计算逻辑
result <- dataframe %>%
  # 转换年份为数值型,避免排序错误
  mutate(FiscalYear = as.numeric(FiscalYear)) %>%
  # 按企业+财年聚合,存储当年所有同行的集合
  group_by(CIK, FiscalYear) %>%
  summarise(peers = list(unique(PeerCIK)), .groups = "drop") %>%
  # 按企业分组后按年份排序
  group_by(CIK) %>%
  arrange(FiscalYear, .by_group = TRUE) %>%
  # 对比当期与上一期的同行集合差异,生成变更哑变量
  mutate(
    last_peers = lag(peers),
    change = ifelse(is.na(last_peers), 0, as.integer(!map2_lgl(peers, last_peers, setequal)))
  ) %>%
  # 保留需要的输出字段
  select(CIK, FiscalYear, change) %>%
  ungroup()

输出结果

运行后打印result即可得到和你预期完全一致的结果:

# A tibble: 5 × 3
  CIK   FiscalYear change
  <chr>      <dbl>  <dbl>
1 21344       2013      0
2 21344       2014      1
3 21344       2015      0
4 21344       2016      0
5 21344       2017      0

如果需要同时统计每一期新增、移除的具体同行ID,只需要在mutate环节增加setdiff(peers, last_peers)、setdiff(last_peers, peers)的计算逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03