如何用R筛选多条件数据:找出2010-2021年从未获补贴的企业ID
筛选2010-2021年间从未获得补贴的企业ID
你用filter(firms$sub==0)只能提取单年份补贴为0的行,但要找出所有目标年份补贴全为0的企业,需要按企业分组后检查组内所有记录的sub值,以下是两种可行方法:
方法1:使用dplyr(tidyverse风格)
先限定时间范围,再按企业ID分组,筛选出组内所有sub均为0的企业,最后去重得到唯一ID:
library(dplyr) # 处理并提取目标企业ID zero_sub_firms <- firms %>% # 仅保留2010-2021年的数据 filter(year >= 2010 & year <= 2021) %>% # 按企业ID分组 group_by(firm_id) %>% # 筛选出组内所有sub都为0的企业 filter(all(sub == 0)) %>% # 去重得到唯一的企业ID列表 distinct(firm_id) # 查看结果 print(zero_sub_firms)
all(sub == 0):检查当前企业的所有年份记录中,sub是否全部为0,只有满足条件的企业组会被保留distinct(firm_id):避免同一企业多次出现在结果中
方法2:使用Base R
如果不习惯tidyverse,也可以用基础R实现:
# 第一步:筛选2010-2021年的数据 firms_target <- firms[firms$year >= 2010 & firms$year <= 2021, ] # 第二步:按企业ID分组,计算每个企业的补贴最大值(全为0则最大值为0) sub_max_per_firm <- tapply(firms_target$sub, firms_target$firm_id, max) # 第三步:提取最大值为0的企业ID zero_sub_firms <- names(sub_max_per_firm[sub_max_per_firm == 0]) # 查看结果 print(zero_sub_firms)
思路:如果某企业所有年份补贴都是0,那么它的补贴最大值必然为0;反之,只要有一年补贴不为0,最大值就会大于0,以此筛选目标企业。
内容的提问来源于stack exchange,提问作者Yuetao Yin
相关产品推荐
相关产品推荐

