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

使用dplyr筛选costat为I的企业最后观测并统计dlrsn年度频次

使用dplyr处理企业年度观测数据的统计需求

需求拆解

  • 筛选costat取值为"I"的企业观测
  • 对每个符合条件的企业,提取其最后一条年度观测(按fyear排序后的最新记录)
  • 按fyear分组,统计dlrsn(取值1-14)各值的年度出现次数

示例数据

# 构造示例数据
sample_data <- tibble(
  gvkey = c(1001, 1001, 1002, 1002, 1003, 1003, 1004),
  fyear = c(2018, 2019, 2018, 2019, 2017, 2018, 2019),
  costat = c("A", "I", "I", "I", "A", "I", "I"),
  dlrsn = c(3, 5, 2, 2, 7, 10, 5)
)

dplyr实现代码

library(dplyr)
library(tidyr) # 用于pivot_wider,未安装需先运行install.packages("tidyr")

# 核心处理逻辑
final_result <- sample_data %>%
  # 1. 筛选状态为"I"的记录
  filter(costat == "I") %>%
  # 2. 按企业分组,按年度排序后取每组最后一条(最新)记录
  group_by(gvkey) %>%
  arrange(fyear) %>%
  slice_tail(n = 1) %>%
  ungroup() %>%
  # 3. 按年度和dlrsn统计次数,转为宽表方便查看
  count(fyear, dlrsn, name = "occurrence_count") %>%
  pivot_wider(
    names_from = dlrsn,
    values_from = occurrence_count,
    values_fill = 0 # 缺失的dlrsn值填充为0
  )

预期输出

# 输出结果预览
# # A tibble: 2 × 4
#   fyear     2     5    10
#   <dbl> <int> <int> <int>
# 1  2018     0     0     1
# 2  2019     1     2     0

关键步骤说明

  • filter(costat == "I"):精准过滤出目标状态的企业观测
  • group_by(gvkey) %>% arrange(fyear) %>% slice_tail(n=1):按企业分组后,按年度升序排列,确保取到该企业的最新年度记录
  • count(fyear, dlrsn):按年度和dlrsn值分组统计出现频次
  • pivot_wider:将长格式统计结果转为宽格式,便于直观对比各dlrsn值在不同年份的分布情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:25:14