使用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
相关产品推荐
相关产品推荐

