R语言:筛选costat为I的企业最后观测并按年统计dlrsn频次
解决方案
任务1:筛选costat为“I”的企业的最后一条观测
Python(Pandas)实现
import pandas as pd # 假设数据存储在名为df的DataFrame中 # 先筛选costat为"I"的记录,按企业ID和年份排序(确保最后一条是最新年份) filtered_data = df[df['costat'] == 'I'].sort_values(by=['gvkey', 'year']) # 按gvkey分组,提取每组最后一行 last_observations = filtered_data.groupby('gvkey').tail(1)
如果数据已经按year升序排列,可以跳过sort_values步骤。
R(dplyr)实现
library(dplyr) # 假设数据存储在名为df的数据框中 last_observations <- df %>% filter(costat == "I") %>% arrange(gvkey, year) %>% # 按企业ID和年份排序 group_by(gvkey) %>% slice_tail(n = 1) %>% # 取每组最后一条记录 ungroup()
任务2:按year统计dlrsn各数值每年出现的次数
Python(Pandas)实现
# 按年份和dlrsn值分组计数,转为宽表展示(每年各dlrsn的次数) yearly_dlrsn_counts = df.groupby(['year', 'dlrsn']).size().unstack(fill_value=0)
如果需要长表格式(每行是某一年的某个dlrsn值及其次数),去掉unstack(fill_value=0)即可。
R(dplyr)实现
library(dplyr) library(tidyr) # 按年份和dlrsn值计数,转为宽表展示 yearly_dlrsn_counts <- df %>% count(year, dlrsn) %>% pivot_wider(names_from = dlrsn, values_from = n, values_fill = 0)
同样,若需要长表格式,只保留count(year, dlrsn)的结果即可。
内容的提问来源于stack exchange,提问作者Ayoze Alfageme
相关产品推荐
相关产品推荐

