R语言如何筛选2009-2018年每年至少出现一次的企业观测值
实现方法(R语言)
推荐使用dplyr包实现,代码最简洁易读:
步骤逻辑
- 先计算统计周期的总年数:2009-2018共10年
- 按企业ID
cnpjcei分组,统计每个企业出现的不重复年份数量 - 仅保留不重复年份数等于总年数的企业的全部观测记录
代码实现
library(dplyr) # 计算统计周期总年数 total_years <- length(2009:2018) # 筛选符合要求的记录 result <- df %>% group_by(cnpjcei) %>% filter(n_distinct(year) == total_years) %>% ungroup()
说明
n_distinct(year)会自动统计每个企业对应出现的不重复年份数量- 筛选逻辑会保留符合要求的企业的全部观测,同一年的多条记录都会被保留,完全匹配需求
如果你习惯用base R实现,也可以用以下代码:
# 计算总年数 total_years <- length(2009:2018) # 统计每个企业的不重复年份数 year_count <- aggregate(year ~ cnpjcei, df, function(x) length(unique(x))) # 筛选符合要求的企业ID valid_ids <- year_count$cnpjcei[year_count$year == total_years] # 提取对应记录 result <- df[df$cnpjcei %in% valid_ids, ]
内容的提问来源于stack exchange,提问作者user16019366
相关产品推荐
相关产品推荐

